Как я могу объединить потоки ATSC с карты DVB?
Я пытаюсь сделать простой "телезритель", используя карту захвата видео Linux DVB. В настоящее время я смотрю телевизор, используя следующий процесс (я на Raspberry Pi):
- Настройтесь на канал, используя
azap -r TV_CHANNEL_HERE
, Это будет поставлять байты на устройство/dev/dvb/adapter0/dvr0
, - Откройте OMXPlayer
omxplayer /dev/dvb/adapter0/dvr0
- Смотри телевизор!
Проблема возникает, когда я пытаюсь изменить каналы. Даже если я настрою проигрыватель на кеширование входящих байтов (пробовал также с MPlayer), проигрыватель не сможет противостоять смене канала (путем перезапуска azap
с новым каналом.
Я думаю, что это из-за изменений в метаданных потока MPEG TS.
Ищите библиотеку C, которая позволила бы мне сделать следующее:
- Извлечь cache_size * mpeg_ts_packet_size с устройства DVR.
- Оцените каждый пакет и, при необходимости, перепишите метаданные (PID и т. Д.).
- Заполните FIFO полученным пакетом.
- Установите {OMXPlayer,MPlayer} для чтения из FIFO.
Еще я подумал о том, чтобы использовать программу, которая конвертирует MPEG TS в MPEG PS и объединяет байты таким образом.
Мысли?
1 ответ
Действительно, когда вы хотите настроиться на другой канал, некоторые метаданные могут потенциально изменить и сделать недействительными ранее кэшированные данные. К сожалению, я не знаком с инструментами, которые вы используете, но ваша точка зрения 2.
заставляет меня поднять бровь: вы будете тратить свое время на перезапись данных Transport Stream.
Я бы предпочел остановить и перезапустить процесс на zapping, так как он кажется, что работает нормально при запуске.
PS: вот несколько инструментов, которые могут помочь. Кроме того, я не уверен, на каком уровне ваша проблема, но VLC может быть установлен на Raspberry PI, и он корректно обрабатывает TS.