1

У меня есть живой поток 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 без транскодирования, если это действительно проблема?

0