ffmpeg添加mpeg ts对pcm的支持
来源:互联网 发布:java退格符处理 编辑:程序博客网 时间:2024/04/29 00:25
在mpegtsenc.c的mpegts_write_pmt函数中,switch(st->codec->codec_id)的case中,添加如下代码
case AV_CODEC_ID_PCM_MULAW:
stream_type = 0x91;
break;
case AV_CODEC_ID_PCM_ALAW:
stream_type = 0x90;
break;
注意该流的定义与mpeg.c中的es_type是一致的,实际上这是mpeg中对mulaw和alaw的流类型定义关键字。这个关键字在后面还需要写到流中,在mpegtsenc.c中查找 else if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO &&
(st->codec->codec_id == AV_CODEC_ID_MP2 ||
st->codec->codec_id == AV_CODEC_ID_MP3 ||
st->codec->codec_id == AV_CODEC_ID_AAC)) {
改为
else if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO &&
(st->codec->codec_id == AV_CODEC_ID_MP2 ||
st->codec->codec_id == AV_CODEC_ID_MP3 ||
st->codec->codec_id == AV_CODEC_ID_AAC ||
st->codec->codec_id == AV_CODEC_ID_PCM_MULAW ||
st->codec->codec_id == AV_CODEC_ID_PCM_ALAW)) {
这段代码是在写入音频流关键字的判断
解码部分需要修改mprgts.c,修改流类型定义如下
上面的红字部分是添加的内容,注意HDMV_types中已经有了0x90的定义。static const StreamType ISO_types[] = {{ 0x01, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG2VIDEO },{ 0x02, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG2VIDEO },{ 0x03, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_MP3 },{ 0x04, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_MP3 },{ 0x0f, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AAC },{ 0x10, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG4 },/* Makito encoder sets stream type 0x11 for AAC,* so auto-detect LOAS/LATM instead of hardcoding it. */#if !CONFIG_LOAS_DEMUXER{ 0x11, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AAC_LATM }, /* LATM syntax */#endif{ 0x1b, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_H264 },{ 0x24, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_HEVC },{ 0x42, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_CAVS },{ 0xd1, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_DIRAC },{ 0xea, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_VC1 },{ 0x90, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_ALAW },{ 0x91, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_MULAW },{ 0 },};static const StreamType HDMV_types[] = {{ 0x80, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_BLURAY },{ 0x81, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AC3 },{ 0x82, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },{ 0x83, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_TRUEHD },{ 0x84, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_EAC3 },{ 0x85, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS }, /* DTS HD */{ 0x86, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS }, /* DTS HD MASTER*/{ 0xa1, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_EAC3 }, /* E-AC3 Secondary Audio */{ 0xa2, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS }, /* DTS Express Secondary Audio */{ 0x90, AVMEDIA_TYPE_SUBTITLE, AV_CODEC_ID_HDMV_PGS_SUBTITLE },{ 0x91, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_MULAW },{ 0 },};/* ATSC ? */static const StreamType MISC_types[] = {{ 0x81, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AC3 },{ 0x8a, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },{ 0x90, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_ALAW },{ 0x91, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_MULAW },{ 0 },};static const StreamType REGD_types[] = {{ MKTAG('d', 'r', 'a', 'c'), AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_DIRAC },{ MKTAG('A', 'C', '-', '3'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AC3 },{ MKTAG('A', 'L', 'A', 'W'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_ALAW},{ MKTAG('U', 'L', 'A', 'W'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_MULAW},{ MKTAG('B', 'S', 'S', 'D'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_S302M },{ MKTAG('D', 'T', 'S', '1'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },{ MKTAG('D', 'T', 'S', '2'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },{ MKTAG('D', 'T', 'S', '3'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },{ MKTAG('H', 'E', 'V', 'C'), AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_HEVC },{ MKTAG('K', 'L', 'V', 'A'), AVMEDIA_TYPE_DATA, AV_CODEC_ID_SMPTE_KLV },{ MKTAG('V', 'C', '-', '1'), AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_VC1 },{ 0 },};static const StreamType METADATA_types[] = {{ MKTAG('K','L','V','A'), AVMEDIA_TYPE_DATA, AV_CODEC_ID_SMPTE_KLV },{ MKTAG('I','D','3',' '), AVMEDIA_TYPE_DATA, AV_CODEC_ID_TIMED_ID3 },{ 0 },};/* descriptor present */static const StreamType DESC_types[] = {{ 0x6a, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AC3 }, /* AC-3 descriptor */{ 0x7a, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_EAC3 }, /* E-AC-3 descriptor */{ 0x7b, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },{ 0x56, AVMEDIA_TYPE_SUBTITLE, AV_CODEC_ID_DVB_TELETEXT },{ 0x59, AVMEDIA_TYPE_SUBTITLE, AV_CODEC_ID_DVB_SUBTITLE }, /* subtitling descriptor */{ 0x90, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_ALAW },{ 0x91, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_MULAW },{ 0 },};
修改定义后,还需要在对law格式音频设置声音参数,修改mpegts_find_stream_type函数如下:
红色部分是添加内容static void mpegts_find_stream_type(AVStream *st,uint32_t stream_type,const StreamType *types){if (avcodec_is_open(st->codec)) {av_log(NULL, AV_LOG_DEBUG, "cannot set stream info, codec is open\n");return;}for (; types->stream_type; types++)if (stream_type == types->stream_type) {st->codec->codec_type = types->codec_type;st->codec->codec_id = types->codec_id;if (st->codec->codec_id == AV_CODEC_ID_PCM_MULAW || st->codec->codec_id == AV_CODEC_ID_PCM_ALAW){st->codec->channels = 1;st->codec->channel_layout = AV_CH_LAYOUT_MONO;st->codec->sample_rate = 8000;}st->request_probe = 0;return;}}
0 0
- ffmpeg添加mpeg ts对pcm的支持
- ffmpeg添加mpeg ps流的pcm的解码支持
- ffmpeg添加mpeg ps流的pcm的编码支持
- ffmpeg修改源码添加flv对pcm的打包支持
- ffmpeg添加MP4的pcm音频支持
- ffmpeg 读取MPEG-TS流,切割TS流支持【HLS协议】
- ffmpeg命令行接收UDP(MPEG-TS)数据
- ffmpeg对ts流的解析
- FFMPEG MPEG-TS Intro - Relevant field of Packet
- how to use ffmpeg with media wowza server (mpeg-ts)
- FFMpeg对MPEG2 TS流解码的流程分析--一
- FFMpeg对MPEG2 TS流解码的流程分析[2]
- FFMpeg对MPEG2 TS流解码的流程分析
- FFMpeg对MPEG2 TS流解码的流程分析[2]
- FFMpeg对MPEG2 TS流解码的流程分析
- FFMpeg对MPEG2 TS流解码的流程分析
- FFMpeg对MPEG2 TS流解码的流程分析[2]
- FFMpeg对MPEG2 TS流解码的流程分析
- leetcode: Binary Tree Right Side View
- TCP三次握手/四次挥手解析
- HDU 5201 The Monkey King
- Android四大组件之Activity篇
- noj算法题——走迷宫
- ffmpeg添加mpeg ts对pcm的支持
- 奇异值分解---几何意义
- 【面试题】只替换字符串中连续出现2次的地方
- 在非MFC项目中使用CString
- ffmpeg添加mpeg ps流的pcm的编码支持
- Npc制作,实用Enemy AI制作一个游戏中可用的Npc
- 使用JDBC处理大数据 读写文件
- .settings各文件的作用
- ffmpeg添加MP4的pcm音频支持