Chen

Results 182 comments of Chen

``` static int h264_write(struct mov_h264_test_t* ctx, const void* data, int bytes) { int vcl = 0; int update = 0; int n = h264_annexbtomp4(&ctx->avc, data, bytes, s_buffer, sizeof(s_buffer), &vcl, &update);...

这个文件只有fmp4文件头,没有写数据。 在各处加些日志看看?

fmp4默认按照gop写入文件,确认下你的视频流关键帧间隔是否为8s。 如果需要强制写入,可以调用fmp4_writer_save_segment接口。

fmp4是流式存储,读不到这些信息正常。

h264源文件是什么格式的? 裸文件没有时间戳信息,fps默认为25,可以根据实际情况修改。

写mp4文件的帧率是多少? 时间戳怎么生成的?

libflv确实没有读VUI信息,如果需要生成准确的时间戳,只能借助第三方库了。可以试试https://github.com/ireader/avcodec,里面有个h264解析模块,可以读到VUI。

libmpeg/test目录下有ps/ts demuxer例子。 libflv/test目录下有flv文件与ts文件转换的例子:flv2ts-test.cpp, ts2flv-test.cpp. flv文件时间戳单位1/1000ms, ts文件时间戳1/90000ms。 如果有裸h264文件,读取264数据并且分帧后,调用mpeg_ts_write写入数据即可。注意:必须是完整的一帧264数据。

> 感谢您的回答,但还有小弟几个地方不了解,还请大佬多多提点 > > 1.有看到PSI_STREAM_AAC,但如果是丢PCM资料,是否在自己新增一个 PSI_STREAM_PCM 的enum成员呢? 并在相对应地方新增写入做判断? > mpeg-ts标准没有提到PCM,如果需要使用PCM,可以自定义一种类型,或者使用PSI_STREAM_AUDIO_G711A、PSI_STREAM_AUDIO_G711U。(这2种g711扩展标准播放器不支持) > 2.是否要照flv2ts范例一样要先建立PMT? 看flv2ts-test.cpp的example路径是这样 ts_stream()->mpeg_ts_add_stream()->mpeg_ts_pmt_add_stream() > 需要 > 3.如下这些定义的含意是?这些参数在mpeg-ts-enc.c > > #define PCR_DELAY 0 //(700 * 90) // 700ms #define PAT_PERIOD...

对每种音视频 mpeg_ts_add_stream 只需要调用一次