У мене є живий потік 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?
EDIT: Як вимагається, коли я запускаю вищевказану команду ffmpeg, це те, що виробляється:
ffmpeg версія 2.4.2 Авторські права (c) 2000-2014 розробники FFmpeg побудовано 15 жовтня 2014 06:19:14 з gcc 4.8.2 (GCC) 20131219 (попередній випуск) конфігурація: --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] відсутнє зображення в блоці доступу розміром 27 [h264 @ 0x1472380] немає кадру! Вхід № 0, video4linux2, v4l2, з '/ dev / video0': Тривалість: N / A, початок: 64.162569, бітрейт: N / A Потік № 0: 0: Відео: h264 (Високий), yuv420p, 1280x720, -5 kb / s, 30 кадрів в секунду, 30 tbr, 1000k tbn, 2000k tbc Вихід № 0, rtp, до 'rtp: //224.0.1.2: 5001': Метадані: кодер: Lavf56.4.101 Потік № 0: 0: Відео: h264, yuv420p, 1280x720, q = 2-31, -5 kb / s, 30 кадрів в секунду, 90k tbn, 1000k tbc Потокове відображення: Потік № 0: 0 -> # 0: 0 (копія) СДП: v = 0 o = - 0 0 IN IP4 127.0.0.1 s = Без імені c = IN IP4 224.0.1.2 t = 0 0 a = інструмент: libavformat 56.4.101 m = відео 5001 RTP / AVP 96 b = AS: -5 a = rtpmap: 96 H264 / 90000 a = fmtp: 96 пакетів-режим = 1 Натисніть [q] для зупинки, [?] Для отримання довідки кадр = 438 кадрів в секунду = 46 q = -1,0 Lsize = 3823 кБ час = 00: 00: 14,34 бітрейт = 2183,2 кбіт / с відео: 3788kB аудіо: 0kB субтитр: 0kB інші потоки: 0kB загальні заголовки: 0kB муксинг накладні: 0,942992%
Я думаю, що проблема може полягати в двох [h264 @
рядках. Чим більше я розслідую, тим більше здається, що у потоку H264, що надходить з камери, або відсутні ключові кадри, або якийсь кадр інформації, що пояснює, який розмір відео. Чи можуть ці "метадані" бути додані ffmpeg без перекодування, якщо це справді проблема?
ffmpeg
вихід.
ffmpeg
команди.