2016-07-25 49 views
0

Ich versuche FFmpeg zu verwenden, um meine Webcam auf ein Android-Gerät basierend auf dem HttpLiveStreaming (HLS) zu streamen. Um den MPEG-TS auf Android zu spielen, verwende ich ExoPlayer.MPEG-TS kann nicht mit ExoPlayer auf Android oder Quicktime auf dem Mac wiedergegeben werden


FFmpeg-Streaming-Befehl: ffmpeg -f avfoundation -video_size 1280x720 -framerate 30 -i "0" -vcodec libx264 -preset veryfast -f flv rtmp://localhost:1935/hls/test

Wenn ich VLC verwendet, um das MPEG-TS zu spielen, war alles in Ordnung. Ich konnte es jedoch nicht mit dem ExoPlayer unter Android oder Quicktime (Safari) unter Mac OS spielen. Dann habe ich versucht, den Grund herauszufinden.


Ich habe versucht, ein MP4-Video mit FFmpeg in der gleichen Weise zu streamen. Zum Beispiel: ffmpeg -re -i test.mp4 -vcodec libx264 -preset veryfast -f flv rtmp://localhost:1935/hls/test

Ich kann es sowohl mit ExoPlayer und Quicktime spielen.


Der einzige Unterschied, den ich zwischen diesen beiden Fällen festgestellt ist, dass die Erfassung Format der Webcam ist YUY2, während die mp4 video YUV420 ist und sie verwendet, um verschiedene H264 Encoder. Ich denke die H264 Decoder für YUY2 und YUV420 sind nicht gleich.

Ich bin mir nicht sicher, ob meine Schlussfolgerung korrekt war und die einzige Lösung für dieses Problem ist, YUY2 vor dem Streaming in YUV420 zu konvertieren.

Ich hoffe, dass jemand, der Mac benutzt, versuchen könnte, die Facetime-Kamera auf dieselbe Weise wie ich zu streamen und zu sehen, ob sie in der Safari abgespielt werden kann.

Antwort

0

Endlich fand ich die Lösung. Genau wie ich herausgefunden habe, muss ich YUY2 vor der H264-Kodierung und dem Streaming in YUV420 konvertieren. Also sollte der Befehl ffmpeg -f avfoundation -pix_fmt uyvy422 -video_size 1280x720 -framerate 30 -i "0" -pix_fmt yuv420p -vcodec libx264 -preset veryfast -f flv rtmp://localhost:1935/hls/test

Dank this sein.