У меня есть живой поток H264 (аппаратное обеспечение, закодированное с веб-камеры), и я бы хотел транслировать его по сети с помощью многоадресной рассылки на платформе Linux.
Поскольку у платформы ограниченная мощность процессора, а данные с камеры уже имеют формат H264, я не хочу транскодировать поток - просто транслировать его как есть, возможно, с дополнительным переносом в любой транспортный контейнер, который необходим.
Я попробовал это:
ffmpeg -f v4l2 -video_size hd720 -framerate 30 -input_format h264 -i /dev/video0 -vcodec copy -an -f rtp rtp://224.0.1.2:5001
Который, кажется, многоадресно передает данные, но когда я начинаю проигрывать поток, я получаю кучу ошибок:
[h264 @ 0x7feffc064400]non-existing PPS 0 referenced
[h264 @ 0x7feffc064400]non-existing PPS 0 referenced
[h264 @ 0x7feffc064400]decode_slice_header error
[h264 @ 0x7feffc064400]no frame!
[h264 @ 0x7feffc064400]non-existing PPS 0 referenced
[h264 @ 0x7feffc064400]non-existing PPS 0 referenced
[h264 @ 0x7feffc064400]decode_slice_header error
[h264 @ 0x7feffc064400]no frame!
Почему это не работает? Как вы должны многоадресно передавать существующий поток необработанных данных H264?
РЕДАКТИРОВАТЬ: В соответствии с просьбой, когда я запускаю вышеупомянутую команду ffmpeg, это то, что получается:
ffmpeg version 2.4.2 Copyright (c) 2000-2014 the FFmpeg developers built on Oct 15 2014 06:19:14 with gcc 4.8.2 (GCC) 20131219 (prerelease) configuration: --prefix=/usr --disable-debug --disable-static --enable-avisynth --enable-avresample --enable-decoder=atrac3 --enable-decoder=atrac3p --enable-dxva2 --enable-fontconfig --enable-gnutls --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-pic --enable-postproc --enable-runtime-cpudetect --enable-shared --enable-swresample --enable-vdpau --enable-version3 --enable-x11grab libavutil 54. 7.100 / 54. 7.100 libavcodec 56. 1.100 / 56. 1.100 libavformat 56. 4.101 / 56. 4.101 libavdevice 56. 0.100 / 56. 0.100 libavfilter 5. 1.100 / 5. 1.100 libavresample 2. 1. 0 / 2. 1. 0 libswscale 3. 0.100 / 3. 0.100 libswresample 1. 1.100 / 1. 1.100 libpostproc 53. 0.100 / 53. 0.100 [h264 @ 0x1472380] missing picture in access unit with size 27 [h264 @ 0x1472380] no frame! Input #0, video4linux2,v4l2, from '/dev/video0': Duration: N/A, start: 64.162569, bitrate: N/A Stream #0:0: Video: h264 (High), yuv420p, 1280x720, -5 kb/s, 30 fps, 30 tbr, 1000k tbn, 2000k tbc Output #0, rtp, to 'rtp://224.0.1.2:5001': Metadata: encoder : Lavf56.4.101 Stream #0:0: Video: h264, yuv420p, 1280x720, q=2-31, -5 kb/s, 30 fps, 90k tbn, 1000k tbc Stream mapping: Stream #0:0 -> #0:0 (copy) SDP: v=0 o=- 0 0 IN IP4 127.0.0.1 s=No Name c=IN IP4 224.0.1.2 t=0 0 a=tool:libavformat 56.4.101 m=video 5001 RTP/AVP 96 b=AS:-5 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1 Press [q] to stop, [?] for help frame= 438 fps= 46 q=-1.0 Lsize= 3823kB time=00:00:14.34 bitrate=2183.2kbits/s video:3788kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.942992%
Я думаю, что проблема может быть связана с двумя [h264 @
. Чем больше я исследую, тем больше похоже, что поток H264, исходящий из камеры, либо пропускает ключевые кадры, либо какой-то информационный кадр, объясняющий, каков размер видео. Могут ли эти "метаданные" быть добавлены ffmpeg без транскодирования, если это действительно проблема?