@Hocok_B_KapMaHe

Как мультиплексировать видео h264 в mpeg-ts, ничего не зная о параметрах видео?

Доброго времени суток!
Хочу написать свой муксер h264 в mpeg-ts без каких-либо внешних библиотек
(пока только видео(h264->mpeg-ts), - без аудио).

Что такое mpeg-ts, - потихоньку разбираюсь (но очень сложно дается), непонятны некоторые вещи:

Можно ли запаковать в контейнер mpeg-ts видео, ничего о нем не зная ?
Ну вот я хочу сделать так:
первый идет хедер c PAT затем PMT, затем хедер с чистым h264 payload.. Через 40 пакетов опять PAT/PMT и т.д?

Но тут столкнулся с Adaptation Field в котором надо писать pts и dts. Откуда их брать? Они сильно зависят от исходного видео, которое сейчас пакуется в этот контейнер?

Или это чисто транспортная штука не зависящая от кодека и ее можно генерировать на лету например на стриминг-сервере ?
  • Вопрос задан
  • 3313 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Hocok_B_KapMaHe Автор вопроса
Итак, я тут вычитал что DTS нужен только если в видео есть B-фреймы. В данном случае у меня видео без Б-фреймов, так что с ДТС пока вопрос решен. Осталось проставить ПТС.

Поигрался с ffprobe + ffmpeg, так вот:
Кодирую файл в чистый h264 без аудио и Б-фреймов:
ffmpeg -i input.ts -vcodec libx264 -an -bf 0 -y out.h264


Теперь смотрю на получившийся файл через ffprobe:
[FRAME]
media_type=video
key_frame=0
pkt_pts=N/A
pkt_pts_time=N/A
pkt_dts=N/A
pkt_dts_time=N/A
best_effort_timestamp=N/A
best_effort_timestamp_time=N/A
pkt_duration=48000
pkt_duration_time=0.040000
pkt_pos=929
pkt_size=29
width=640
height=360
pix_fmt=yuv420p
sample_aspect_ratio=1:1
pict_type=P
coded_picture_number=2
display_picture_number=0
interlaced_frame=0
top_field_first=0
repeat_pict=0
[/FRAME]


Видно то что PTS просто неизвестен
pkt_pts=N/A
pkt_pts_time=N/A
pkt_dts=N/A
pkt_dts_time=N/A

Но при команде:
ffmpeg -i out.h264 -vcodec copy -y out.ts

Получаю нормалный TS файл, при чем с проставленным PTS.
Откуда он (ffmpeg) его взял? Как его проставить?
На основании чего? Или есть какой-то стандарт типа "увеличивается на N через N пакетов"?

PTS: 126000 - первый пакет
PTS: 129600 - седьмой пакет
PTS: 133200 - восьмой пакет
....
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы