ireader / media-server

RTSP/RTP/RTMP/FLV/HLS/MPEG-TS/MPEG-PS/MPEG-DASH/MP4/fMP4/MKV/WebM
MIT License
2.98k stars 1.06k forks source link

使用mpeg-ts-dec时,回调数据中首帧为0x1001(MPEG_FLAG_PACKET_LOST | MPEG_FLAG_IDR_FRAME) #304

Closed 1046099253 closed 10 months ago

1046099253 commented 10 months ago

查看源码 libmpeg/source/mpeg-ts-dec.c 中 ts_demuxer_input()。下面代码时会默认以首帧的continuity_counter等于1的逻辑进行处理。

pes->flags |= ((ts->pat.pmts[j].streams[k].cc + 1) % 16) != (uint8_t)pkhd.continuity_counter ? (MPEG_FLAG_PACKET_CORRUPT | MPEG_FLAG_PACKET_LOST) : 0;
ts->pat.pmts[j].streams[k].cc = (uint8_t)pkhd.continuity_counter;

而通过mpeg-ts-enc.c处理过得首帧数据的continuity_counter是0,导致这种情况出现 是否也应该考虑首帧的continuity_counter可能是随机数值的情况

ireader commented 10 months ago

ts的包需要是从0开始, 非0就可能意味着丢数据了, MPEG_FLAG_PACKET_LOST 这个flag只是提示信息, 如果咱们能确定没有丢数据, 可以忽略这个标记.