Open mjx4mois opened 2 years ago
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成员呢? 并在相对应地方新增写入做判断?
2.是否要照flv2ts范例一样要先建立PMT? 看flv2ts-test.cpp的example路径是这样 ts_stream()->mpeg_ts_add_stream()->mpeg_ts_pmt_add_stream()
3.如下这些定义的含意是?这些参数在mpeg-ts-enc.c
假设video fps设定30,这边是让PAT_CYCLE设定30没错吧? PAT_PERIOD也是要连动设定吗? PCR_DELAY主要用意是什么呢?
4.有看到初始化3个fp ,是否 ts_write为最后输出的地方呢? 看起来ts_alloc跟ts_free好像不用在实做?
還請多多幫忙了
感谢您的回答,但还有小弟几个地方不了解,还请大佬多多提点
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 (400 90) // 500ms #define PAT_CYCLE 50 // 50fps(audio + video)
假设video fps设定30,这边是让PAT_CYCLE设定30没错吧? PAT_PERIOD也是要连动设定吗? PCR_DELAY主要用意是什么呢?
pcr相关参数,包括delay主要用于硬件设备时钟同步,pc端不管软解还是硬解,这些参数实际没有使用。
4.有看到初始化3个fp ,是否 ts_write为最后输出的地方呢? 看起来ts_alloc跟ts_free好像不用在实做?
還請多多幫忙了
alloc/free回调只是为了方便内存复用,write是最终生成ts 188字节的地方。 在write函数里可以保持成文件,也可以直接通过网络发送出去。
謝謝大佬回答,
目前調試源碼,嘗試寫入多張I frame ,打印出看到pmt->stream_count=4的時候,進入mpeg_ts_pmt_add_stream 出現 assert , 估計是stream_count用完了,但看完源碼沒有看到類似設定處.
目前使用簡單 while(frame<300) / 1s =30frame / { .... mpeg_ts_write(ts, mpeg_ts_add_stream(ts, data_type, NULL, 0), MPEG_FLAG_IDR_FRAME, pts 90, dts 90, read_h264_buffer, get_h264_file_size_data); .... }
不知是否哪邊調試出問題?
還請幫忙提點一下,謝謝.
对每种音视频 mpeg_ts_add_stream 只需要调用一次
目前可以將H264正常寫入了,另外想再請問您,目前塞PCM資料除了再mpeg_stream_type_audio添加字定義的PCM enum後, 已將PCM格式寫入到ts流中,但PC端的播放器確沒辦法正確解出PCM影片是靜音的(這邊有確認MPEG_FLAG_H264_H265_WITH_AUD是有設定到的.) 是否在給進去PCM資料前需要寫基本的格式資訊?例如:sample rate,單/雙通,頻率?
再次感謝您!
MPEG-TS标准不支持PCM音频格式, 这个库中的pcm音频是私有扩展,需要支持国标gb28181协议的播放器才能播放音频。
最好将pcm转换成aac,再保存到ts文件。
因為才剛開始研究流媒體,對TS流有興趣研究,但沒有看到相關使用mpeg-ts-enc.c 或相關muxer操作,
追您的源碼看到後面有幾個接口在mepg-muxer.c裡,也看過mepg-muxer.h的註釋,
但實際上對接有些參數不甚了解,例如pts,dts是要何時傳入什麼數值...等
但對於struct成員的初始化,跟寫資料的參數要如何設置?
假設我有H264資料跟音頻資料,frame rate...等資訊,要如何給進去packer呢?
還請您幫忙解惑,感謝您.