2017-11-27 6 views
0

Ich muss gleichzeitig streamen/broadcast (über RTMP) und speichern Video (mit Audio) von meiner USB-Webcam. Die Webcam ist Logitech c920, die Hardware-h.264-Encoder haben.avconv gleichzeitig streamen von USB-Webcam und speichern Sie Video auf der Festplatte

Ich möchte das Medium nicht neu codieren, daher verwende ich die Option -c:v copy.

Das ganze Skript sieht wie folgt:

#! /bin/bash 

SOURCEV="/dev/video0" 
SOURCEA="hw:1" 

FILE_TO_SAVE="Archive/file_to_save.mp4" 
YOUTUBE_URL="rtmp://x.rtmp.youtube.com/live2" 
KEY="my-secret-key"   

avconv -f alsa -ac 2 -r 44100 -i $SOURCEA \ 
-s 1920x1080 -r 24 -c:v h264 -i "$SOURCEV" \ 
-ar "44100" -r:v 24 -c:a aac -c:v copy -s 1920x1080 -f mp4 "$FILE_TO_SAVE" \ 
-g $FPS*4 -ar "44100" -b:a "128k" -ac 2 -r 24 -c:a aac -c:v copy -s 1920x1080 -f flv "$YOUTUBE_URL/$KEY" 

Diese Methode „funktioniert“ - es bedeutet es Inhalte streamen und auf der Festplatte speichern, aber das Problem mit dieser Methode ist, dass Videodatei auf die stützt Strom. Wenn die Internetverbindung beispielsweise zu langsam ist, hat die gespeicherte Datei einen niedrigen FPS. Wenn die Internetverbindung unterbrochen wird, wird die "Aufnahme" der Videodatei gestoppt.

Kann jemand mir helfen, diese zwei Ströme unabhängig zu machen?

Die ganze Sache passiert auf raspberrypi 3, so dass die Rechenleistung stark begrenzt ist.

Antwort

1

Versuchen Sie, nginx + nginx-rtmp lokal zu installieren und streamen Sie dorthin. In Optionen des Servers aktivieren Sie das Speichern in lokalen Dateien. Und starten Sie ein anderes Skript, um es erneut auf youtube zu streamen.

+0

Danke, es scheint ziemlich stabil zu funktionieren, aber Youtube warnt mich jetzt vor meinem Keyframe-Intervall, das 10 Sek. Ist. Gibt es eine Möglichkeit, es zu verkürzen? Ich habe dieses Thema gelesen: [link] (https://github.com/raspberrypi/linux/issues/593) Aber die h264_i_frame_period Kontrolle fehlt in meinem. Das schwierige yhing ist, dass ich den iframe intervel mit guvcview einstellen kann, aber diese Einstellung scheint nur für die aktuelle guvcview-Instanz zu gelten, – BojowyZajaczek

+0

Das sind Encoder-spezifische Einstellungen, nginx transkodiert kein Video. – bukkojot

+0

Ich weiß, dass dies nicht von nginx gesteuert wird. Ich wollte einfach keine andere Frage stellen. Vielleicht kann jemand das Encoder-Keyframe-Intervall auf 100 Frames setzen? – BojowyZajaczek

Verwandte Themen