2015-02-17 2 views
0

Я ищу способ потока TS-файла как бесконечно циклический поток HTTP. Я попытался просто конкатенацию файла, но это приводит к повреждению воспроизведения.Как закодировать поток MPEG TS

У меня есть базовый код для чтения заголовков пакетов TS, но я не уверен, как пакеты относятся к базовому видеопотоку. Являются ли фреймы согласованными с пакетами (так что, возможно, я могу зацикливать его, повторяя правильные пакеты), или мне нужно полностью использовать demux/remux исходный поток TS для его работы?

Служба, которая будет размещать HTTP-поток, будет работать на одном из Android-шлюзов Android на базе Amlogic S802, можно ли передавать эти данные через версию ffmpeg для Android через Java или любое решение должно быть чисто Java?

ответ

2

Файлы TS содержат временные метки (PTS и DTS), и некоторые игроки зависят от них, некоторые - нет.

Например, если вы берете .ts файлов из потока HLS и объединяете их, они обычно воспроизводятся нормально, потому что временные метки непрерывны в кусках.

В вашем случае вы можете попробовать использовать формат сцепить или фильтр в FFmpeg - https://trac.ffmpeg.org/wiki/Concatenate

Можно также вручную разобрать пакеты TS, но я бы рекомендовал использовать демультиплексор libav библиотеки для того, чтобы извлечь видео и аудио пакетов ,

Если вы работаете на Android, то вы можете посмотреть на с открытым исходным кодом реализации плеера Google о TsExtractor - https://github.com/google/ExoPlayer/blob/master/library/src/main/java/com/google/android/exoplayer/hls/parser/TsExtractor.java

+0

Я провел некоторое время, играя с FFmpeg сгенерирована HLS последовательности, но, к сожалению, они не будут петли, вместо того, чтобы ближе к концу последовательности видеоролик останавливается около 1 секунды, прежде чем он должен закончить, он начинается в начале последовательности. В самом последнем цикле последовательности (я только зацикливаюсь несколько раз), она воспроизводится до конца. Я попытался объединить отдельные файлы ts, созданные ffmpeg, а также отредактировать m3u8, чтобы включить те же файлы несколько раз. – Brainfloat

+0

если он останавливается, убедитесь, что вы положили '# EXT-X-ENDLIST' в конце, иначе игрок будет ожидать больше данных – Dmitry

+0

Это не так, когда у меня есть # EXTM3U # EXT-X-VERSION: 3 # EXT-X-TARGETDURATION: 3 # EXT-X-MEDIA-пОСЛЕДОВАТЕЛЬНОСТИ: 8 out0.ts out1.ts out2.ts out0.ts out1.ts out2.ts out0.ts out1.ts out2.ts # EXT-X-ENDLIST Он всегда кидается между out2.ts и out0.ts – Brainfloat

Смежные вопросы