Как я могу объединить потоки ATSC с карты DVB?

Я пытаюсь сделать простой "телезритель", используя карту захвата видео Linux DVB. В настоящее время я смотрю телевизор, используя следующий процесс (я на Raspberry Pi):

  1. Настройтесь на канал, используя azap -r TV_CHANNEL_HERE, Это будет поставлять байты на устройство /dev/dvb/adapter0/dvr0,
  2. Откройте OMXPlayer omxplayer /dev/dvb/adapter0/dvr0
  3. Смотри телевизор!

Проблема возникает, когда я пытаюсь изменить каналы. Даже если я настрою проигрыватель на кеширование входящих байтов (пробовал также с MPlayer), проигрыватель не сможет противостоять смене канала (путем перезапуска azap с новым каналом.

Я думаю, что это из-за изменений в метаданных потока MPEG TS.

Ищите библиотеку C, которая позволила бы мне сделать следующее:

  1. Извлечь cache_size * mpeg_ts_packet_size с устройства DVR.
  2. Оцените каждый пакет и, при необходимости, перепишите метаданные (PID и т. Д.).
  3. Заполните FIFO полученным пакетом.
  4. Установите {OMXPlayer,MPlayer} для чтения из FIFO.

Еще я подумал о том, чтобы использовать программу, которая конвертирует MPEG TS в MPEG PS и объединяет байты таким образом.

Мысли?

1 ответ

Действительно, когда вы хотите настроиться на другой канал, некоторые метаданные могут потенциально изменить и сделать недействительными ранее кэшированные данные. К сожалению, я не знаком с инструментами, которые вы используете, но ваша точка зрения 2. заставляет меня поднять бровь: вы будете тратить свое время на перезапись данных Transport Stream.

Я бы предпочел остановить и перезапустить процесс на zapping, так как он кажется, что работает нормально при запуске.

PS: вот несколько инструментов, которые могут помочь. Кроме того, я не уверен, на каком уровне ваша проблема, но VLC может быть установлен на Raspberry PI, и он корректно обрабатывает TS.

Другие вопросы по тегам