H.264 videosunu Raspberry Pi kamera modülünden bir web sunucusu üzerinden nasıl aktarabilirim?


50

Bu yüzden bugün Ahududu Kamerasını aldım ve hala iyi çalışıyordum.

JPEG formatında bir resim çekin:

raspistill -o image.jpg

H.264 formatında 5 saniyelik bir video çekin :

raspivid -o video.h264

Kullanılabilir HTML5'ten yararlanmak istediğim için fazladan bir uygulama kurmak istemiyorum . Yana Krom / Safari yerleşik H.264 için kod çözücüleri Sadece URL'ye benim tarayıcısına akışı izlemek istiyorum.

Bunu nasıl başarabilirim?


2
Ben de bunun üzerinde çalışıyorum. Ben düşünüyorum Eğer nginx veya buna benzer bir MP4 desteği eklemek gerekir. Bir buluşum varsa size bildiririm.
recantha

@recantha Akış videosu ile ilgili yeni bir atılım yaptınız mı?
Piotr Kula

3
Bulduğum en iyi çözüm Silvan Melchoir'in RaspiMJPEG'sine dayanıyor. Raspberry Pi Vakfı'nın forumundaki her şeyi açıklayan bir bağlantı içeren bloguma bir göz atın. ( recantha.co.uk/blog/?p=11176 )
recantha

2
Evet, çeşitli cihazlara akış yapabilmek için harika görünüyor. Ne FPS ve gecikme alıyorsunuz? Uv4l'i VLC ve OSD ile iyi çalışmayı başardım. Çok kısa ve kötü bir demo. Yakında daha iyi bir hale getirecek. Deneme ve hata saatlerinden sonra gece geç saatlerde yapıldı. youtu.be/LO10Ytlauag
Piotr Kula

@ppumkin RaspiMJPEG çalışırken bir python betiği ile nasıl kayıt yapabilirim? Bir video kaydı başlatır, ancak .h264 formatında kayıt yapar.
Coderaemon

Yanıtlar:


32

HLS ile Akış

Apple'ın tescilli canlı video yöntemi. HTTP Canlı Akışı (HLS) olarak adlandırılır ve yalnızca Apple teknolojisi tarafından desteklenir. Google (Chromium / YouTube) dash mpeg adlı kendi uygulamasını kullanıyor ve MP4'te kapsanan H.264'ü kullanan herkes ya kafasını karıştırıyor ya da kullanıyor .

Artıları

  • LAN üzerindeki HD 1080p akışını , .m3u8çalma listelerini destekleyen herhangi bir cihaza aktarabilir
  • HTML5 anlambilimini kullanır (ancak standartlaştırılmış bir format değildir)
  • Jwplayer 6 gibi üçüncü taraf premium yazılımlarda bazı destek kullanılabilir

EKSİLERİ

  • En az 5 saniyelik bir gecikme süresi vardır (bu uygulamada, ancak iPhone'dan AppleTv'ye yansıtma kullanarak bir şekilde 50 ms - 500 ms elde ederler). Bu yüzden, anında reaksiyon gereken, yani robot veya helikopter gibi uzaktan kumandalı uygulamalar için iyi değildir.
  • Yanıp sönebilecek tarayıcı desteğini genişletmek istiyorsanız, üçüncü taraf yazılımı için ödeme yapmanız gerekir.

m3u8

  • .m3u8M3U formatının bir UTF-8 versiyonudur. (.m3u dosyalarının çeşitli kodlamaları olabilir.) Bazı insanlar .m3u8 - .m3u adını değiştirmenin tüm HTML5 tarayıcılarında beklendiği gibi çalışacağını iddia ediyor. Bunu denedim ve benim için işe yaramadı.

Bu akışın arkasındaki kavram, en az 5 saniye uzunluğunda olan dosyaların kısa bölümlerinin (bu örnekte - onu hızlandırmak için olası yeni yollar) kaydedilmesi ve uygun bir dosyaya kaydedilmesidir. Çalma listesi dosyası, yeni dosya adıyla güncellenir ve istemci her zaman bu çalma listesini seçer ve en son dosyayı indirir. Videoyu istemcide sorunsuz bir şekilde birleştirmek için bazı mekanikler var. Bu nedenle, diğer geliştiricilerin bunu uygulamak istememeleri, çok fazla çaba gerektirmeleri ve HTML5 standartlarına uymamaları nedeniyle (canlı akışlar için uygun bir HTML5 standardı olmasa bile? Ehh, sigh ).

yükleme

Derlemeniz gerekir ffmpeg- FFmpeg için kullanmayınapt-get install

Bu 5 saate kadar sürebilir - Bu sahiptir segmenti akımını destekleyen sürüm 1.1 veya daha yüksek olması. Bunu klonlamak ve derlemek için kullanabilirsiniz.

cd /usr/src
git clone git://source.ffmpeg.org/ffmpeg.git

cd ffmpeg
./configure
make && make install
  • Nginx'i kurun (engine-x) - nginx , gömülü aygıtlar için özel olarak tasarlanmıştır ve şu anda kullanılabilen en hafif ve en hızlı PHP etkin web sunucusudur. (Evet, hantal Apache'den daha iyidir )
  • Bir dizin oluşturun, örneğin www klasörünüzde yayınlayın, /usr/share/nginx/www/

Buna benzer bir şey adı verilen bir Bash betiği dosyası hazırlayınvideo.sh , uygulayın chmod +xve içine yapıştırın. Temel klasörü, HTTP sunucunuzun yaşadığı yere değiştirin . Ben kullanılan nginx,/usr/share/nginx/www/

#!/bin/bash

base="/data/live"

cd $base

raspivid -n -w 720 -h 405 -fps 25 -vf -t 86400000 -b 1800000 -ih -o - \
| ffmpeg -y \
    -i - \
    -c:v copy \
    -map 0:0 \
    -f ssegment \
    -segment_time 4 \
    -segment_format mpegts \
    -segment_list "$base/stream.m3u8" \
    -segment_list_size 720 \
    -segment_list_flags live \
    -segment_list_type m3u8 \
    "segments/%08d.ts"


trap "rm stream.m3u8 segments/*.ts" EXIT

# vim:ts=2:sw=2:sts=2:et:ft=sh

Oynatma listesini yükleyecek bir HTML dosyası oluşturun

<html>
  <head>
    <title>PiVid</title>
  </head>
  <body>
    <video controls="controls" width="1280" height="720" autoplay="autoplay" >
      <source src="stream.m3u8" type="application/x-mpegURL" />
    </video>
  </body>
</html>

Destek

  • iPhone, sayfayı açar ancak QuickTime'a düşer . Kalitesi gerçekten şaşırtıcı!
  • Windows Safari, iyi akışlar.
  • Macintosh veya Windows, QuickTime. Akarsu iyi.
  • Android 2.3.5 ve işe yaramadı, ancak 2.1.x'ten beri desteklenmesi gerekiyordu
  • Pencereler, Chrome - Hiçbir şey
  • Windows, Internet Explorer 10 --- Hiçbir şey (desteklenmeyen video türü)
  • Windows, VLC medya oynatıcı - Hiçbir şey

Referans: http://www.raspberrypi.org/phpBB3/viewtopic.php?p=351392&sid=5b9a46f5eea2c7a0887d2efdfa7edade#p351392

Orijinal kod: https://github.com/AndyA/psips/blob/master/examples/hls.sh


Ffmpeg'in derlemesini hızlandırmak konusunda RPI'nin düşük hesaplama kapasitesini ve ffmpeg için uzun derleme sürelerini aşmak için, Qemu'yu Wheeze ile birlikte kullanmaya çalıştım ancak giriş yaparken bir engelle karşılaştım ve bir Arch imgesiyle denemek zorunda kaldım. . Bu çalıştı. Ayrıca , Ubuntu görüntüsü üzerinde
SQeeze

2
Eski segmentleri otomatik olarak silmenin bir yolu var mı? SD kart bir süre sonra doluyor. Ayrıca, silinmelerini istiyorum, bunu bir tmpfs üzerinde çalıştırabilirim ve SD kartı mahvetmeyebilirim.
Dimme

2
@Dimmme Eğer ffmpeg'ye -segment_wrap 10bir argüman olarak eklerseniz , maksimum 10 segment dosyası kullanır.
gregers

Bunu işe almak isteyen var mı? Dosyalar oluşturulur, ancak SPS / PPS bilgisini kaçırır gibi görünür, bu yüzden video iOS Safari'de veya VLC'de oynatılmaz. Stream.m3u8 ayrıca segments/bölüm dosyalarını işaret ederken bunu da içermiyordu , bu yüzden bölüm klasörünü düşürdüm. Bir şeyi yanlış mı anladım?
gregers

Akışı PSIPS filtre ikili kutusundan geçirmeniz gerekir. Raspicam'ın en yeni sürümünün bunu yapması gerekiyordu .. ama nedense PSIPS'siz çalışamadım
Piotr Kula

23

UV4L MMAL

MMAL'i çok verimli bir şekilde uygulayan Linux-Projects V4L2 sürücüsündeki güncelleme için @mpromonet'in yaptığı yorum için teşekkürler - ama bu hala devam eden bir çalışma.

Linux-proje havuzunu kurmak ve UV4L sürücüsünü ekstralar ile kurmak için bu talimatları izleyin . Ardından sunucuyu ve mjpeg'i kurun. İsterseniz diğerleriyle de deneyebilirsiniz.

Her şeyi yükledikten sonra, 8080 numaralı bağlantı noktasından HTTP sunucusuna erişebilirsiniz. /etc/uv4l/confDosyayı kontrol etmeli ve mjpeg veya H.264'ü bir fark yaratırsa isteyip istemediğinizi ayarlamalısınız, ancak yerleşik bir web üzerinden birkaç ayar yapabilirsiniz. sunucusu.

HTML 5

Bu bizim için beklediğimiz şeydi ( WebRTC ) ve yeni sürücü sayesinde harika çalışıyor (bir Ahududu Pi 2'de).

Önce, şu adımları izleyin : http://www.linux-projects.org/modules/sections/index.php?op=viewarticle&artid=14 :

curl http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc | sudo apt-key add -

# Add the following line to the file /etc/apt/sources.list
# deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy main

sudo apt-get update
sudo apt-get install uv4l uv4l-raspicam

sudo apt-get install uv4l-raspicam-extras

Sonra Raspberry Pi 2'nizde bunu WebRTC'ye kurun (bir Raspberry Pi 1 için, diğer seçenekler için bağlantılı siteyi okuyun)

sudo apt-get install uv4l-webrtc

Tüm sürücüleri yeniden başlatın ve

http://raspberry:8080/

Artık düşük gecikmeli, yüksek kaliteli video akışına doğrudan Chrome veya Firefox gibi modern bir tarayıcıya sahipsiniz. (Belki Safari, ancak kontrol edemiyorum, çünkü artık Winblows yapmıyorlar ve Internet Explorer… eh)

MJPEG

Varsayılan olarak, mjpeg1080p'de kullanır ve çok halsizdir. 800x600 frameize ve video işlemek için iSpy gibi bir şey kullanarak tweaked. Güvenlik için net bir videoda yaklaşık 10 fps alıyorum. Bu sürücüden önce 640x480'deki 3 fps'den çok daha iyi. İPhone, Safari, Android Chrome ve diğer her şeyle çalışır.

http://raspberrypi:8080/stream/video.mjpeg

Bu aynı zamanda motion(hala test etmeli ve karşılaştırmalıyım) artık daha iyi çalışmalı. Kullanılacak yapılandırmayı ayarladığınızdan emin olun v4l2_palette 8veyav4l2_palette 2

H.264

Bu, "akış" için düzeltildi ve V.2 medya oynatıcı üzerinden H.264 video izlemek için çok uzun sürmemize gerek yok . Akış eşik RAW H.264'tür, bu nedenle başka bir yerde çalışmanız gerekiyorsa demux veya transcode / encapsualte gerekir. bitrate=xxxxxxWi-Fi üzerinden akış yapıyorsanız, yapılandırma dosyasında ince ayar yapmalısınız .

VLC media player'da, H.264 kod çözücüyü kullanmak istediğinizi söylemelisiniz. Eğer GUI kullanıyorsanız, argümanı eklediğinizden emin olun :demux=264. Komut satırından vlc http.../video.h264 --demux h264. Aksi halde, kamera LED'i açık olsa bile sadece boş bir ekran göreceksiniz.

http://raspberrypi:8080/stream/video.h264

İşte bu kadar! Yaklaşık 500 ms gecikmeli HD akış (tweaking ile 200 ms'ye düşürülmüş). Eski yöntemleri kullanmaktan kesinlikle çok daha kolaydır. Kalite ve FPS mükemmel, ancak bunu HTML5'e MP4 veya WebM'ye kodlamadan gömemezsiniz . Umarım bu gerçekten harika bir bağımsız sunucu yapacak gibi uygulanacaktır.

RTSP / RTMP / RTP

Desteklenmiyor / uygulanmıyor

http://www.linux-projects.org/uv4l/tutorials/rtsp-server/

HLS

Desteklenmiyor / uygulanmıyor


Henüz bir video4linuxsürücü yok. Bu, USB web kamerası gibi veya benzerini kullanarak veri akışı yapmak için ffserver kullanamayacağımız anlamına gelir /dev/video0.

Bu nedenle, HTML5 tarayıcıları için doğru canlı akışı bulmak çok zor.


Şimdi orada video4linuxsürücü resmi V4L2 sürücüsü bcm2835-v4l2 ve kullanıcı alanı V4L2 sürücüsü [ linux-projects.org/modules/sections/…
mpromonet 11:14

Gerçek bir v4l sürücüsü mü yoksa aptalca bir performans sergiliyor mu?
Piotr Kula

1
Resmi sürücü MMAL arayüzünü kullanır, bkz. Kaynak kodu [ github.com/raspberrypi/linux/blob/rpi-3.12.y/drivers/media/… . Performans doğru görünüyor.
mpromonet

3 gündür bununla oynuyorum. Mjpeg kodlaması çok daha kararlı ve açık şekilde güvenilirdir; iPhone, Android veya iSpy'da 800x600 @ 10fps görüntüleyebilirsiniz. h264 1080p 30fps hızında harika ve --demux h264bayrağı kullanarak bunu vlc'de görebiliriz. Mobil kullanım için ya da web sayfalarına mp4 / webm olarak gömmek için bu işlemi yine de kodlamamız gerekiyor. Ancak verimli ve kaliteli ilerlemek gerçekten harika. Çöp olan "diğer" UV4L olmayan linux-proje sürücüsü şeyle karıştırmayın.
Piotr Kula

Ekleme: demux = 264 H264 yönteminde vlc istemcisi için değil, vlc sunucusu içindir. Akıllı telefonlarda vlc ile uyumluluk elde etmek için ahududu akışını başlatmak için komut satırı şöyledir:/usr/bin/cvlc v4l2:///dev/video0 --v4l2-width 800 --v4l2-height 400 --v4l2-chroma h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:8080}' :demux=264
Jaime M.

10

MJPEG ile Akış

U4VL

HTTP (S) sunucusunda bir yapıya sahip bir çekirdek arayüzü.

http://www.linux-projects.org/uv4l/tutorials/streaming-server/

Ahududu Pi Cam Web arayüzü

Bir web sunucusu, dvr benzeri, çoklu hedef akış sunucusu kullanan , güzel bir proje . Daha fazla bilgi gerekiyor

https://github.com/silvanmelchior/RPi_Cam_Web_Interface

Eski yöntem

Mjpg ile akış, Internet Explorer 6 da dahil olmak üzere hemen hemen tüm tarayıcılar tarafından desteklenmektedir. onlar. Bazı cihazlar 25 fps'ye kadar ulaşabilir ve bağlantınız kötü olsa bile en az 1 fps elde edersiniz.

HD kameralarda mjpg desteği kesildi, çünkü JPEG dosyası Internet üzerinden yayın yapmak için çok büyüdü ve H.264 çok daha hızlı ve daha kaliteli bir protokoldü.

Kamera modülünü doğal olarak kullanarak H.264'ü yayınlamanın bir yolu olmadığından, bu uygulanabilir bir düşüşe benziyor ...

Hemen hemen anında geldi, ancak 1,5 fps'den daha fazlasını almayı beklemeyin. Bu, raspistillson derece SLOOOW olmak için aşağı ! Bize 10 fps vermesi gereken 100 ms ayarlı zaman atlamalı işlevini kullanmak işe yaramıyor çünkü raspistillsadece boğuluyor ve kendi içinde ciddi performans sorunları var.

  1. Değişim /tmphızı için RAM kullanımı /etc/default/tmpfsdeğişikliği - RAMTMP=yes(Bu fps artırmak için bir çaba, ama sadece onun kendine olan saklayamazsınız raspistill.)
  2. Yeniden Başlatma
  3. apt-get install git
  4. apt-get install yükleme libjpeg8-dev
  5. apt-get install libv4l-dev
  6. apt-get install imagemagick
  7. cd /usr/src, mkdir mjpg oynatıcısı, cd mjpg oynatıcısı ...
  8. git clone https://github.com/engine12/mjpg-streamer.git
  9. make USE_LIBV4L2=true clean all
  10. OPSİYONEL Hatalarınız varsa
  11. sudo ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h
  12. sudo ln -s /usr/include/lib4l2.h /usr/include/linux/lib4l2.h
  13. Makefile içinde input_file ve output_http dışındaki tüm eklentileri yorumlayın ve tekrar yapın. Burada bir sürü sorun yaşadım.
  14. İkili, kopyalama mjpg_streamerve eklentileri input_*.sove output_*.soiçin /usr/local/bin. Aksi takdirde, doğrudan src dizininden çalıştırın.
  15. İsteğe bağlı son
  16. mkdir /tmp/stream
  17. raspistill -w 640 -h 480 -q 5 -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0 &
  18. LD_LIBRARY_PATH=./ ./mjpg_streamer -i "input_file.so -f /tmp/stream" -o "output_http.so -w ./www" (bunu ikili ve eklentilerin olduğu yerde çalıştırın)
  19. Goto http://<IP-address>:8080
  20. İşte birkaç seçenek, modern, eski ve deneysel - çoğu tarayıcı tarafından desteklenen eski moda bir şekilde yayın yapan "canlı" tadını çıkarın.

Yaklaşık 5 saat boyunca onu derlemeye çalıştım ... iç çekişti , ancak akışa herhangi bir telefondan ve herhangi bir tarayıcıdan erişebildiğim için bunu kullanacağımı düşünüyorum. Daha iyi sürücüler elde edene kadar beklemeliyim ... Bir veya iki yıl daha. :(

Hangi kaliteyi seçersem deneyeyim, akımı kullanarak 1 fps'den daha hızlı ya da daha yavaş olmadım. 720p ve 1080p kullandım ve yalnızca görüntü kalitesi daha iyi hale geliyor, ancak fps LAN'da bir fark yaratmıyor. Küçük ayarların WAN / 3G veya diğer radyo yayınlarında yardımcı olacağını varsayalım.

raspistill, görüntüyü tek bir dosyaya yazar. Bu bir darboğaz olabilir. Dosyayı yazar, mjpg strreamer okur ve engelleyen bir G / Ç'ye neden olan dosyayı siler, böylece raspistill dosyaya yazamaz.

Ben raspivid kullandığını düşünebilirsiniz tek şey yöneltilen FFmpeg'den Bunu denemek ve muhtemelen o usign raspistill çok daha hızlıdır gerekir - Bizim için JPEG dosyalarını oluşturur. Şok kalitesinde 25 fps almayı başardım ve yaklaşık 10 saniye gecikti ... Ayarların ince ayarının yapılması 3 fps, ancak% 100 CPU oldu. Video akışını işlemek için hiçbir donanım kullanılmıyor ...

raspivid -w 640 -h 480 -fps 25 -vf -t 86400000 -b 1800000 -o -  \
ffmpeg -i - \
    -f image2(?) \
    -c:v mjpeg \
    stream%d.jpg

Ayrıca okuyordum ve %draspistill çıktı dosya adında kullanabileceğimizi öğrendim. Acaba bu fpsi artıracak mı? Ayrıca JPG kodlaması raspistill'de hızlandırılmış donanımdır, bu yüzden neden bu kadar yavaş olduğunu anlamak için uğraşıyorum.

%dDosya adını kullanarak şaşırtıcı bir 2 FPS aldım . Nedense, JPEG dosyasını yazmak raspistill'den korkunç derecede yavaştır. İç çekmek.


bilgi paylaştığınız için teşekkür ederiz
user566245

10

2017'den itibaren (belki de daha önce) raspividartık tercih edilen yöntem değil, Pi devs'in insanlara V4L2 kullanmasını tavsiye etmesiyle.

Bu nedenle, bu yöntem yerine V4L2'yi kullanarak H264'ü RTP üzerinden izlemenizi sağlar raspivid. Bu yöntemin daha az düşüşle sonuçlandığını ve daha yüksek bir bit hızı sağladığını fark ettim:

#!/bin/sh

# Use V4L2 (preferred) instead of raspivid
# exposure_dynamic_framerate=1 (raspivid --fps 0) - reduce framerate/increase exposure in low light
# scene_mode=8 (raspivid --exposure night) - allow framerate reduction to increase exposure
v4l2-ctl -v width=1296,height=972,pixelformat=H264 \
        --set-ctrl=exposure_dynamic_framerate=1 \
        --set-ctrl=video_bitrate=5000000 \
        --set-ctrl=scene_mode=8

exec ffmpeg -f h264 -probesize 32 -r 30 -i /dev/video0 -vcodec copy -an -f rtp_mpegts udp://224.0.1.2:5004

Bu komut dosyası videoyu çok noktaya yayınlar ve LAN'daki başka bir makinede şöyle bir komutla görüntülenebilir:

ffplay -sync ext -an -fast -framedrop -probesize 32 -window_title "Raspberry Pi" -an udp://224.0.1.2:5004

-sync extPi'nin bundan daha hızlı kareler yakalaması durumunda, videonun mümkün olduğu kadar hızlı oynatılmasını sağlar, böylece gerçek kare olarak oynatılır ve sabit bir kare hızında oynatılır ve geciktirilir. Bu yöntemde hala bazı gecikmeler var, ancak diğer raspividyöntemlerden daha kötü değil .

(İpucu: IGMP'yi destekleyen bir yönlendiriciye veya anahtara bağlıysanız 224.0.0.0/4, makinenizde güvenlik duvarının olmadığından emin olun , aksi takdirde yönlendirici PC'nize hiç bir zaman çok noktaya yayın trafiği istemiyorsa ve asla görmeyecekseniz herhangi bir video.)

Diske kayıt

Aşağıdaki yorumlardaki kayıtlardan bahsettiğim gibi, burada bunun üzerine genişleyeceğim. Ağ akışını diske kaydetmek için böyle bir komut kullanabilirsiniz:

ffmpeg -y -i udp://224.0.1.2:5004 -c copy \
  -f segment -segment_atclocktime 1 -segment_time 900 \
  -reset_timestamps 1
  -strftime 1 /path/to/storage/pi-%wT%H%M.mkv

Dosya adındaki sembollerin man strftimeanlamlarına bakın %. Bu örnekte olanlar, gün sayısını (0 = Pazar, 1 = Pazartesi vb.) Ve ardından a Tve ardından kullanır. Her 15 dakikada bir yeni bir dosya başlatır.

Açıkçası, bu kayıt komutunun muhtemelen Pi'de de (denenmemiş) çalışacak olmasına rağmen, uzaktaki bir bilgisayarda (Pi'nin kendisinde değil) çalıştırılması amaçlanmıştır.

Her 15 dakikada bir dosya adında gün ve saatte yeni bir dosya aldığınızdan, bir hafta sonra daha önce kullanılmış olan dosya adlarını almaya başlayacağınız ve en eski dosyaların üzerine yazılmasına neden olacağınız anlamına gelir. Başka bir deyişle, önceki haftanın çekim değerinin yuvarlanma döngüsüyle sonuçlanırsınız. Bu, nadiren bir haftadan daha fazla geri dönmeniz gerekecek bir güvenlik kamerası için idealdir.

Bir yan not olarak, bu yaklaşık 500GB değerinde dosya üretir, bu nedenle çok fazla yer kaplamasını istemiyorsanız bit hızını, çözünürlüğü ayarlamak veya dosyaların üzerine yazmak (24 saatte bir söylemek) isteyebilirsiniz.


Harika - Bunu paylaştığın için teşekkürler. Burada çok noktaya yayın kullanımının neden gerekli olduğunu açıklayabilir misiniz? Öğrendiklerime göre çok noktaya yayın nadiren kullanılıyor - bu yüzden burada masaya ne getirdiğini merak ediyordum? Yine de - Senaryo harika gözüküyor ve insanların paylaştırılmasına yardımcı olacağından eminim. Teşekkürler +1
Piotr Kula

1
Çok noktaya yayın isteğe bağlıdır - dilerseniz normal bir IP adresi kullanabilirsiniz ffserver, ancak beslemeyi görüntülemek için birden fazla makine istiyorsanız , kullanılacak komutu veya başka bir sunucu sistemini değiştirmeniz gerekir . O zaman belki 2-3 istemciden sonra (video bit hızına bağlı olarak) Pi'nin USB Ethernet adaptörü bant genişliği tükenir. Çok noktaya yayın ile bir sunucu çalıştırmaya gerek kalmaz (istemci makineleri sadece trafiği dinlemeyi veya görmezden gelmeyi seçer) böylece videoyu görüntüleyen binlerce makineye sahip olabilirsiniz. .
Malvineous

Açıkladığınız için teşekkürler - Fakat çok noktaya yayın yalnızca dahili ağlarda çalışır? Eğer bir ISS çok noktaya yayın paketi alırsa, genellikle sadece striptiz yaparlar - yani internetteki herkese yayın yapamazsınız. Sanırım büyük bir dahili ağınız varsa, çok büyük bir akış yayınlamaya çalışmanız ağınızı da etkileyebilir mi? Ama evet .. sadece bir akışı izlemem için sadece seçilen IP'ye UDP yapacağım .. ama çok noktaya yayın seçeneğini yine de seviyorum: D Bu hafta sonu bunu daha önce hiç yapmadığım için yapacağım. :) Teşekkürler
Piotr Kula

1
Evet çok noktaya yayın esas olarak dahili ağlar içindir. IPv6 ile daha iyi çalışması gerekiyordu, ancak yine de ISS ile işbirliğine ihtiyacı olacağını düşünüyorum. Bunu kullanıyorum çünkü Pi üzerinde bir sunucu çalıştırmak zorunda değilim ve Pi'nin konfigürasyonunu değiştirmeden veya Pi'nin ağ bant genişliğini aşırı yüklemeden iki farklı makineden gelen akışları izleyebiliyorum ve diske kaydedebiliyorum. Dahili ağınız büyükse, etkiyi normalden farklı yapmak için gereken çok noktaya yayın trafiğini göndermek için tasarlanmış IGMP özellikli anahtarlar kullanıyor olabilirsiniz.
Malvineous

1
Açıkladığınız için teşekkür ederiz. Artık çok noktaya yayın kullanımının ev kullanıcılarını bile etkilemeyecek küçük uyarılarla kullanmanın birçok faydasını görebiliyorum. Bunu kesinlikle deneyeceğim. Bazen mantıklı olması için işaret edilmesi gereken basit ve açık şeylerdir. Ve güncellemenize bakıyorum .. kayıt bit aslında gerçekten, gerçekten harika!
Piotr Kula

4

Raspberry Pi'mden derlenmiş modül nginx-rtmp ile bir web sunucusuna aktarmayı başardım .

İle uğraşmaktan kurtulmak için ffmpeg, Arch Linux Arm gibi bir dağıtım öneririm .

raspivid -vf -t 0 -fps 25 -b 2000000 -o - |
ffmpeg -i - -vcodec copy -an -r 25 -f flv rtmp://x220/myapp/mystream

Bazı notlar:

Dolayısıyla, bu temelde, Ahududu Pi'den canlı yayın yapmak, geçici bir yayın için uygun olabilir, ancak çok fazla bant açlığına sahip olduğu için her zaman açık olan bir Web kamerası için uygun olmayabilir. Ses alamayacaksınız ve yaparsanız senkronize etmek bir görev olacak.

Sesi, video kaydetmeyle aynı anda daha verimli şekilde kaydedebilirsiniz. Daha sonra belki daha sonra ses beslemesini daha sonra kısaltın ve WebM'ye dönüştürün ve HTML video etiketli statik bir dosya olarak httpd'nize koyun. İş akışı oldukça garip, ancak tarayıcılar arasında ağrısız çalışacak verimli bir yayın için aklıma gelen en iyisi.


1
Yine de bant genişliğini ve çözünürlüğü kontrol edebilirsiniz. CCTV için yerel LAN akışı kullanıyorsanız, o zaman bu bir sorun bile değil. İnternet üzerinden yayın yapılmasının talep halinde olması ve / veya daha düşük çözünürlükte olması gerekebilir. Ama bunu yapmanın başka bir yolu. Teşekkürler +1
Piotr Kula

ve nasıl çalışması gerekiyor? benim için değil ... FFMPEG "RTMP_Connect0, sokete bağlanamadı. 111 (Bağlantı reddedildi)"
Flash Thunder


2

Piotr Kula'nın cevabı doğru yolda gözüküyor ancak Ahududu meyvesi için modası geçmiş.

Uv4l için Ahududu streç adresinde güncelleştirilmiş talimatlar bulunmaktadır.

https://www.linux-projects.org/uv4l/installation/

# switch to superuser mode
sudo -s
# add the repository key for uv4l
curl http://www.linux-projects.org/listing/uv4l_repo/lpkey.asc | sudo apt-key add 
# add the url for the u4vl repository to apt
echo "deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/stretch stretch main" >> /etc/apt/sources.list
apt-get update
apt-get install uv4l uv4l-raspicam
apt-get install uv4l-raspicam-extras
# do not forget to install the server - see what happens if you do
# below
apt-get install uv4l-server
reboot

Uv4l seçeneklerini /etc/uv4l/uv4l-raspicam.conf aracılığıyla tweetleyebilir ve ardından hizmeti yeniden başlatabilirsiniz.

sudo service uv4l_raspicam restart

Benim durumumda işler kutudan işe yaramadı (uv4l-server kurmayı unuttuysanız ...). Aşağıdaki yorumlar benzer sorunları ayıklamanıza yardımcı olabilir.

Sunucunun çalıştığını kontrol ettim:

pgrep -fla uv4l
995 /usr/bin/uv4l -f -k --sched-fifo --mem-lock --config-file=/etc/uv4l/uv4l-raspicam.conf --driver raspicam --driver-config-file=/etc/uv4l/uv4l-raspicam.conf --server-option=--editable-config-file=/etc/uv4l/uv4l-raspicam.conf

ve dinlenip dinlenmediği

sudo netstat -tulpn 

ancak listede uv4l için bir giriş yoktu. 8080 numaralı bağlantı noktasından birini bekliyordum.

Bu yüzden UV4L nasıl yapılandırılır komutunu denedim ?

uv4l --sched-rr --mem-lock --driver raspicam \
> --width 960 --height 540 --framerate 30 \
> --encoding mjpeg --vflip --hflip
<notice> [core] Trying to loading driver 'raspicam' from built-in drivers...
<notice> [core] Loading driver 'raspicam' from external plug-in's...
<notice> [driver] Dual Raspicam & TC358743 Video4Linux2 Driver v1.9.63 built Oct  6 2018
<notice> [driver] Detected camera imx219, 3280x2464
<notice> [driver] Selected format: 960x544, encoding: mjpeg, JPEG Video Capture
<notice> [driver] Framerate max. 30 fps
<notice> [core] Device detected!
<notice> [core] Registering device node /dev/uv4l

Ama yine de sunucu otomatik olarak başlamadı ...

man uv4l

sonra bana seçeneği gösterdi

--enable-server [=arg(=required)] (=auto)
          enable the streaming server. Possible values are: 'auto' (tenta‐
          tively start the server), 'required' (exit if failing  to  start
          the  server,  only  works if --foreground is enabled), 'off' (no
          server at all).

bu yüzden denedim:

pkill uv4l
sudo uv4l --sched-rr --mem-lock --driver raspicam --encoding mjpeg --enable-server=required
<notice> [core] Trying to loading driver 'raspicam' from built-in drivers...
<notice> [core] Loading driver 'raspicam' from external plug-in's...
<notice> [driver] Dual Raspicam & TC358743 Video4Linux2 Driver v1.9.63 built Oct  6 2018
<notice> [driver] Detected camera imx219, 3280x2464
<notice> [driver] Selected format: 1920x1080, encoding: mjpeg, JPEG Video Capture
<notice> [driver] Framerate max. 30 fps
<notice> [core] Device detected!
<notice> [core] Registering device node /dev/uv4l

ancak 8080 numaralı bağlantı noktasında veya başka bir yerde çalışan hiçbir sunucu yok. Öyle görünüyor ki, man sayfasının gerekli olduğu "- topground" seçeneğini unuttum:

sudo uv4l --sched-rr --mem-lock --driver raspicam --encoding mjpeg --enable-server=required --foreground
<notice> [core] Trying to loading driver 'raspicam' from built-in drivers...
<notice> [core] Loading driver 'raspicam' from external plug-in's...
<notice> [driver] Dual Raspicam & TC358743 Video4Linux2 Driver v1.9.63 built Oct  6 2018
<notice> [driver] Detected camera imx219, 3280x2464
<notice> [driver] Selected format: 1920x1080, encoding: mjpeg, JPEG Video Capture
<notice> [driver] Framerate max. 30 fps
<notice> [core] Device detected!
<notice> [core] Trying to load the the Streaming Server plug-in...
<warning> [core] libserver.so: cannot open shared object file: No such file or directory
<alert> [core] No Streaming Server detected

Şimdi bu net bir ipucu! Henüz bir sunucu yok gibi görünüyor - yükleyin:

sudo apt-get install uv4l-server

ve yeniden dene:

sudo uv4l --sched-rr --mem-lock --driver raspicam --encoding mjpeg --enable-server=required --foreground
<notice> [core] Trying to loading driver 'raspicam' from built-in drivers...
<notice> [core] Loading driver 'raspicam' from external plug-in's...
<notice> [driver] Dual Raspicam & TC358743 Video4Linux2 Driver v1.9.63 built Oct  6 2018
<notice> [driver] Detected camera imx219, 3280x2464
<notice> [driver] Selected format: 1920x1080, encoding: mjpeg, JPEG Video Capture
<notice> [driver] Framerate max. 30 fps
<notice> [core] Device detected!
<notice> [core] Trying to load the the Streaming Server plug-in...
<notice> [server] HTTP/HTTPS Streaming & WebRTC Signalling Server v1.1.125 built on Mar  9 2019
<warning> [server] SSL is not enabled for the Streaming Server. Using unsecure HTTP.
<notice> [core] Streaming Server loaded!
<notice> [core] Registering device node /dev/uv4l
<notice> [server] Web Streaming Server listening on port 8080

Sunucu şu an http: // pi: 8080 adresinde mevcuttur (pi'yi sunucunuzun ip veya ana bilgisayar adı ile değiştirin)

Yeniden başlatmanın ardından başka bir komuta girerek çıktı.


1

UV4L artık Web üzerinden Jitsi Meet Rooms'a canlı ses ve video yayınını destekliyor . Özel bir yapılandırma gerekmez. Adınızı, odanızı doldurmak ve Başlat'ı tıklamak kadar kolay .


Hangi tarayıcıyı kullanıyorsunuz? Jitsi, yalnızca Pi, Chromium'un Pi'de bulunduğu Chrome, Chromium, Opera ve Firefox NIghtly'i destekler. Fakat Chromium bana bir webkitRTCPeerConnection is not definedhata verdi. WebWTC için normalde IceWeasel kullanıyorum, ancak bu Jitsi için desteklenmiyor.
modulitos 17:15

1
PI’de, IceWeasel’de neredeyse kırılmış bir destek dışında WebRTC’yi destekleyen bir tarayıcı yoktur. Kullandığım yol şudur: Pi-> Cloud'daki Jitsi Sunucusu -> başka yerde bilgisayarım
prinxis 17:15

1
UV4L, gecikme olmadan donanım kodlu H264 canlı akışı destekler.
prinxis,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.