У мене є живий потік 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команди.