#ffmpeg #video-streaming #gstreamer #video-processing
#ffmpeg #video-streaming #gstreamer #video-processing
Вопрос:
Мне нужно передавать различные типы файлов в формате MJPEG. Есть две проблемы, на самом деле одна проблема и один вопрос. В настоящее время я использую ffserver и ffmpeg.
Проблема: скорость воспроизведения ( с использованием-re ) не 1,0 x, а переменная, и это неприемлемо, потому что я хочу запускать несколько потоков параллельно, поэтому они должны быть синхронизированы.
Вопрос: есть ли лучший способ синхронизировать потоковую передачу в виде MJPEG некоторых файлов, расположенных на локальном диске ? ( одновременно пять файлов .mkv или .mov h264 ).
Давайте возьмем, к примеру, ввод, подобный одному файлу, записанному с помощью моего iPhone.
Duration: 00:00:18.50, start: 0.000000, bitrate: 8248 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 8114 kb/s, 30.01 fps, 30 tbr, 600 tbn, 1200 tbc (default) Metadata: encoder : H.264 Side data: cpb: bitrate max/min/avg: 128000/0/64000 buffer size: 1638400 vbv_delay: -1 displaymatrix: rotation of -0.00 degrees [mjpeg @ 0x556ad36056a0] rc buffer underflowime=00:00:00.10 bitrate=5898.2kbits/s speed=0.199x Last message repeated 3 times [mjpeg @ 0x556ad36056a0] rc buffer underflowime=00:00:00.60 bitrate=2512.2kbits/s speed=0.595x Last message repeated 14 times [mjpeg @ 0x556ad36056a0] rc buffer underflowime=00:00:01.10 bitrate=2055.4kbits/s speed=0.724x ... [mjpeg @ 0x556ad36056a0] rc buffer underflowime=00:00:17.33 bitrate=1225.0kbits/s speed=0.978x Last message repeated 14 times [mjpeg @ 0x556ad36056a0] rc buffer underflowime=00:00:17.83 bitrate=1227.4kbits/s speed=0.978x Last message repeated 18 times frame= 555 fps= 30 q=31.4 Lsize= 2780kB time=00:00:18.46 bitrate=1233.2kbits/s speed=0.988x video:2757kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.831204
Я попробовал использовать файл, который уже был MJPEG ( но я не использовал никакой магии перекодирования, просто обычное декодирование), и я добился лучшей производительности, почти 1x:
Stream #0:0: Video: mjpeg (MJPG / 0x47504A4D), yuvj422p(pc, bt470bg/unknown/unknown), 640x480, 16562 kb/s, 30 fps, 30 tbr, 30 tbn, 30 tbc Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s16, 1536 kb/s Stream mapping: Stream #0:0 -gt; #0:0 (mjpeg (native) -gt; mjpeg (native)) Output #0, ffm, to 'http://localhost:8090/monitoring2.ffm': Metadata: creation_time : now encoder : Lavf57.83.100 Stream #0:0: Video: mjpeg, yuvj422p(pc), 640x480, q=2-31, 64 kb/s, 30 fps, 1000k tbn, 30 tbc Metadata: encoder : Lavc57.107.100 mjpeg Side data: cpb: bitrate max/min/avg: 128000/0/64000 buffer size: 1638400 vbv_delay: -1 [mjpeg @ 0x55ffd796a220] rc buffer underflow Last message repeated 10 times [mjpeg @ 0x55ffd796a220] rc buffer underflowime=00:00:00.50 bitrate=4653.0kbits/s speed=0.995x Last message repeated 14 times [mjpeg @ 0x55ffd796a220] rc buffer underflowime=00:00:01.00 bitrate=3932.2kbits/s speed=0.983x Last message repeated 14 times [mjpeg @ 0x55ffd796a220] rc buffer underflowime=00:00:01.50 bitrate=3670.0kbits/s speed=0.984x Last message repeated 14 times [mjpeg @ 0x55ffd796a220] rc buffer underflowime=00:00:02.00 bitrate=3555.3kbits/s speed=0.986x Last message repeated 15 times [mjpeg @ 0x55ffd796a220] rc buffer underflowime=00:00:02.53 bitrate=3479.4kbits/s speed= 1x Last message repeated 14 times [mjpeg @ 0x55ffd796a220] rc buffer underflowime=00:00:03.03 bitrate=3435.2kbits/s speed=0.998x
Моя команда воспроизведения: ffmpeg -повторная выборка.МОВА http://localhost:8090/monitoring1.ffm Моя конф. ffserver:
lt;Feed monitoring1.ffmgt; File /tmp/monitoring1.ffm FileMaxSize 50M ACL allow 127.0.0.1 lt;/Feedgt; lt;Stream monitoring1.mjpggt; Feed monitoring1.ffm Format mpjpeg VideoCodec mjpeg VideoFrameRate 30 VideoBufferSize 200 VideoSize 640x360 NoAudio lt;/Streamgt;
My CPU is an Intel i7 9th gen Any suggestions ?