mpegts mux(mp4->mpegts)遇到的坑
2022-07-07 本文已影响0人
自由侠
. 需要时基(timebase)转换. mpegts 音视频的时基均未 90000(90k); mp4的音视频时基可能不一样. 需转换为mpegts的时基
. 转换mp4到mpegts, 声音断续; 原来是因为原始mp4的h264里边有b帧, 而dts未设置. 导致出问题. (不再支持有b帧的mp4了)
. 仅转aac到mpegts, 文件不能播放; (目前仍未解决,看看ffmpeg如何处理)
. g711a音频不能封装为mpegts.
. 开源库的坑, 由于对mpegts一无所知, 库从ffmpeg-mpegtsenc.c -> felix-001/mpegtslib -> unit-x/mpegts -> akanchi/mpegts
放弃ffmpeg是因为里边涉及的数据结构太复杂, 有封装,音视频编码等一些列数据结构. 扣代码太复杂;
放弃felix-001/mpegtslib是因为不会用, 并且demo不能直接使用
放弃unit-x/mpegts 也是因为不会用, 并且demo不能直接使用.
使用akanchi/mpegts是因为demo无bug. 但没有现成的api可以使用, 但unit-x/mpegts貌似在改项目基础上修改,
于是借鉴了unit-x/mpegts的使用方法.
In a word:
1. 原始mp4文件的格式需要为 h264/aac(h264最好不要有b帧, 如果有b帧,一定要注意换算dts, 音频不能为g711等)
2. 需要进行时基转换.