River Cam (7 / 8 steg)
Steg 7: Streaming till YouTube
Titta på en live video av åstranden visar fängslande och tyvärr RPi kämpar som en webbserver för mer än ett par anslutningar. Därför något mer skalbar behövdes, och det är där YouTube Live (eller Ustream) kommer in. Principen är för Pi att strömma en (enda) kopia av videon på YouTube där deras servrar kan ta på "grunt" att mata ström till världen.
Börjar med en ren kopia av Raspbian lite (Jessy) jag var tvungen att ladda ner och göra ffmpeg (eftersom det är inte längre tillgänglig av apt-get (se refs). Men efter att ha tillbringat en kväll tittar gör löpande (även med j4 parametern – att använda alla fyra kärnor), jag hittade i installationsanvisningarna motioneye en annan metod av gör detta men får en kompilerad version (jag inte har testat detta) från:
wget https://github.com/ccrisan/motioneye/wiki/precomp...
dpkg -i ffmpeg_2.8.3.git325b593-1_armhf.deb
Jag behövde också redigera/etc/modules att omfatta "bcm2835-v4l2" som autoloads föraren (spara med att göra en modprobe på varje stöveln). Vad detta ger dig är en enhet i/dev kallas video0 som kan användas att läsa raw input från kameran
Metoden var sedan att hitta ett sätt att sända MJPEG till en rimlig kvalitet till LAN så att en annan maskin kunde plocka upp och göra motion detection grejer. För första försöket använde jag CVLC till ström MJPEG med hjälp av följande kod:
raspivid -o - -t 99999 - hf -w 640 - h 480 - fps 25 | cvlc - vvv stream: / / / dev/stdin--sout ' #standard {access = http {mime = multipart/x-blandat-Byt; gräns =--7b3cc56e5f51db803f790dad720ed50a}, mux = mpjpeg, dst =: 8554 /} "-jag dummy
cvlc--no-audio v4l2: / / / dev/video0--v4l2 bredd
640--v4l2-höjd 480--v4l2-chroma MJPG--v4l2-hflip 1--v4l2-vflip 1--sout
"#standard {access = http {mime = multipart/x-blandat-Byt; gräns =--7b3cc56e5f51db803f790dad720ed50a}, mux = mpjpeg, dst =: 8554 /}"
-Jag dummy
Att ha uppnått att jag sedan lyckades läsa denna utgång (på samma enhet) och åter sända det till YouTube. I detta skede fann jag att jag på ett tillförlitligt sätt kunde strömma runt 5-6fps på 800 x 480 vilket var betydligt bättre än jag var att uppnå visning MotionEye direkt.
Denna bit kod lyckades plocka upp MJPEG strömmen från kameran och åter sända det till youtube:
ffmpeg -f lavfi -i anullsrc = channel_layout = stereo: sample_rate = 44100 -f mjpeg -i http://127.0.0.1:8554 \
-kortaste - c: v h264 - c: en aac-strikt experimental -f flv rtmp://a.rtmp.youtube.com/live2/< yourkey>
Du kommer att behöva redigera de markerade bitarna till egna värden. Det måste sägas att anländer till raden ovan tog en hel del forskning och slutligen ens behöva läsa ffmpeg manuell! Nyckeln till att förstå hur det fungerade var att ta reda på att alla alternativ innan en – i (input) ställa in som särskilt rör (så alternativet-f mjpeg talar om den – i http://... input att förvänta MJPEG data medan nästa – f flv alternativ talar om utdata vilket format vara. Enkelt när du vet hur...
Titta på processoranvändningen såg jag 280% för ffmpeg koden och 99% för rörelse (kör raw MJPEG strömmen tidigare beskrivits används endast 7% så extra är rörelsedetektorn pågår. Detta motsvarar den Pi3 fyra kärnor arbetar ganska hårt och en ytterligare kontroll av processorn fann att efter några minuters körning, Pi var igång en kärntemperatur på 83,8 ° C och hade sjunkit processorfrekvens ner till 600 MHz (från 1400) och kärna frekvens 250 MHz (från 400). Detta förklaras möjligen därför en inledande YouTube stream andelen 14fps snart förkortas till cirka 5,3 fps (även om nu tror jag detta kan vara en faktor av ström från MotionEye).
Att lägga till två kylflänsar bättre saker. Pi stabiliseras efter ca 5 minuter till ett stabilt tillstånd 766MHz och kärna frekvens på 400MHz och 6,8 fps. Återigen var temperaturen runt 84° C varumärket vilket naturligtvis där Pi är programmerad att bo när du kör platt ut.
Nästa experiment var att använda en Pi nolla att köra MotionEye och kameran och plocka upp strömmen från en Pi3B. På 800 x 600 kunde Pi noll leverera bara 4,5 fps med rörelsedetektor, lyft detta till 7fps med det off (Core temp 53° C @ 1000MHz och 100% laddad), så tyvärr inte kraftfull nog för vad jag vill men detta tillät mig att se hur Pi3 faired bara kör YouTube strömmen. Konstigt med lastning nu på 340% och en Core temp 61,8 ° c armen var frekvens sjunkit ganska snabbt till 600MHz och Core till 250MHz vilket ger en framerate på 5.4 fps. Min gissning är att Pi matchning framerate på den sändande enheten och sänka befogenhet att spara energi. Kontrollera den Pi3 överföringshastigheten (borde ha tänkt på detta första) visade en utgång av 6,5 fps/14 fps.