Як передати трансляцію H264 без транскодування?


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?

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команди.
llogan

@LordNeckbeard: Спасибі - я додав ffmpegвихід.
Malvineous
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.