2017-07-06 2 views
0

Was ich will, ist unkompliziert: H.264 Video-Stream in einen FLV-Container wickeln. Jedoch ffmpeg entschlüsseln Sie einfach den Eingangsstrom und packen rohe Videostream in FLV. Die Details werden unten beschrieben:FFMPEG: Wie h264-Stream in FLV-Container umhüllen?

Der Eingangsstrom wird von einer Hardware-Encoder-Videokamera erfasst und der FLV wird an einen Videoserver gesendet. Zuerst habe ich den folgenden Befehl verwendet:

$ ffmpeg -framerate 15 -s 320x240 -i /dev/video1 -f flv "rtmp://some.website.com/receive/path" 

Der resultierende Stream ist jedoch verdächtig. Die Zuschauer bekommen keine H.264-Sache. Dann habe ich einen Test gemacht, indem ich die Ausgabe in lokale Dateien geschrieben habe.

1: Lesen Sie Rohstrom, kodieren von h264_omx, schreiben Sie in das FLV-Datei:

$ ffmpeg -framerate 15 -s 320x240 -i /dev/video0 -codec h264_omx -f flv raw_input_h264_omx.flv 

...... 
Input #0, video4linux2,v4l2, from '/dev/video0': 
    Duration: N/A, start: 194017.870905, bitrate: 18432 kb/s 
    Stream #0:0: Video: rawvideo (YUY2/0x32595559), yuyv422, 320x240, 18432 kb/s, 15 fps, 15 tbr, 1000k tbn, 1000k tbc 
Stream mapping: 
    Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (h264_omx)) 
...... 

2: H264-Stream lesen, schreiben in das FLV-Datei:

$ ffmpeg -framerate 15 -s 320x240 -i /dev/video1 -f flv h264_input.flv 

...... 
Input #0, video4linux2,v4l2, from '/dev/video1': 
    Duration: N/A, start: 194610.307096, bitrate: N/A 
    Stream #0:0: Video: h264 (Main), yuv420p(progressive), 320x240, 15 fps, 15 tbr, 1000k tbn, 2000k tbc 
Stream mapping: 
    Stream #0:0 -> #0:0 (h264 (native) -> flv1 (flv)) 
...... 

dann entsprechend die beiden Dateien lesen :

$ ffmpeg -i raw_input_h264_omx.flv 
...... 
    Stream #0:0: Video: h264 (High), yuv420p(progressive), 320x240, 200 kb/s, 15 fps, 15 tbr, 1k tbn 

$ ffmpeg -i h264_input.flv 
...... 
    Stream #0:0: Video: flv1, yuv420p, 320x240, 200 kb/s, 15 fps, 15 tbr, 1k tbn 

Es ist klar, wenn ich einen H.264-Stream geben, ffmpeg entschlüsselt es zuerst und packt dann das rohe Video in FLV. Wie kann das vermieden werden und der H.264-Stream direkt gepackt werden?

Ergänzung: Ich schiebe schließlich mehrere Videostreams, also bitten Sie mich nicht zu erlauben ffmpeg 's stille Decodierung, und kodieren Sie den Strom erneut.

Antwort

4

Sofern nicht anders angegeben, wird ffmpeg Streams umcodieren.

Verwenden

ffmpeg -framerate 15 -s 320x240 -i /dev/video1 -c copy -f flv "rtmp://website/receive/path"