ffmpeg原本不支持mpeg ps流,原因有两个。首先在编码时,ffmpeg没有在流中写入psm头;其次,在解码时,只在读文件头的时候判断了流的类型,而ps流中,流类型是在psm头中的,这样ffmpeg会读不到流类型。

要解决读不到媒体类型的问题,需要在 mpeg.c函数中 mpegps_read_packet函数中做修改,该函数是读取数据包的,如果没有文件头,那么执行到此函数中时,psm头不一定被读出了,换句话说音视频流不一定已经被分析出流类型关键字了,因此在 
 es_type = m->psm_es_type[startcode & 0xff];
这行代码之后要做出一个判断,这行代码是从已读出的psm头中获取本包的流类型,如果没有找到本包对应的流类型,es_type会等于0。所以在本段代码后应加上
 if (es_type == 0) goto skip;

即当没有获得本包的媒体类型时,应当跳过后续处理。

pcm_mulaw在mpeg.c中虽然有支持,但判断了流媒体的类型,如果要所有的mpeg流都支持pcm_mulaw,就需要修改
 else if (m->imkh_cctv && es_type == 0x91) {

这个判断,改为

         else if (es_type == 0x91) {
即当es_type等于0x91时,判断本包为pcm_mulaw数据包。
    如果要增加对pcm_alaw的支持,需要在es_type的这片判断媒体类型的代码中添加
        else if(es_type == 0x90){
            codec_id = AV_CODEC_ID_PCM_ALAW;
            type = AVMEDIA_TYPE_AUDIO;
        }
此外,还需要es_type的判断代码之后,found:标记之前加上如下代码:
            if (codec_id == AV_CODEC_ID_PCM_ALAW)
            {
                st->codec->channels = 1;
                st->codec->sample_rate = 8000;
                st->codec->channel_layout = AV_CH_LAYOUT_MONO;
            }
该段代码是判断如果流是pam_alaw时,设置声道数、采样率、音频数据格式等声音参数,mpeg.c中已经有了codec_id等于AV_CODEC_ID_PCM_MULAW时的处理,可以在该段代码之后添加pam_alaw的声音参数设置。

ffmpeg添加mpeg ps流的pcm的解码支持相关推荐

  1. MPEG PS流格式

    MPEG PS流格式 1. PS包头 图1 1) Pack start code:包起始码字段,值为0x000001BA的位串,用来标志一个包的开始 2) SCR base,SCR extenstio ...

  2. 使用ffmpeg添加rtsp字幕流 (t140)

    如有错误请指正,谢谢. 使用ffmpeg添加rtsp字幕流 (t140) 使用ffmpeg推送一个视频文件到rtsp非常简单: ffmpeg -re -i subtitle.mkv -vcodec c ...

  3. FFmpeg添加x265/hevc编码器支持

    FFmpeg添加了对流行hevc编码器x265的支持极大的方便了编解码场景的融合应用.以下记录说明在windows下编译带libx265编码器的FFmpeg. 环境 Windows7 + Visual ...

  4. 使用ffmpeg来探测GB28181的ps流

    GB28181 GB28181 是我国内的标准,现在到2016修订后比较成熟,有很多可取之处,当然,依然是建立在sip协议之上,比起rtmp协议来说,他的优点是复用了rtp协议和sdp协议,这一点很优 ...

  5. ffmpeg解码ps流部分代码以及PS播放器demo

    之前的设备研发算是告一段落了,最近一直在忙视频监控平台的架构以及实现,想把自己的设备接到自己的平台里,设备上的码流是ps流,要在平台里解码ps流->解码成h264->yuv->rgb ...

  6. javaCV简单解析gb28181的rtp ps流,并推流到rtmp服务

    本文转自javacv社区三群管理员"赶在时间前面":过去的过去了的博客,感谢大佬倾情贡献,支持javacv社区发展和壮大. 国标gb28181全系列都可以参考过去的过去了的博客,再 ...

  7. gb28181简单解包rtp ps流,推出rtmp(java版基于springboot):六、解包rtp ps流,推出rtmp

    解析流程参考 https://blog.csdn.net/chen495810242/article/details/39207305 代码基于github上的修改 https://github.co ...

  8. H264和音频流打包成PS流 (MPEG2-PS)

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 原文:https://blog.csdn.net/hiwubihe/article/details/80736848 [本系列相关文章] H26 ...

  9. 视频知识基础:什么是TS、PS流?

    在MPEG-2系统中,信息复合/分离的过程称为系统复接/分接,由视频,音频的ES流和辅助数据复接生成的用于实际传输的标准信息流称为MPEG-2传送流(TS:TransportStream). 据传输媒 ...

最新文章

  1. 校园交易平台后台系统git操作全过程
  2. Bootstrap常用类
  3. 阿里云云效技术专家:一文详解kubernetes下5种常见发布模式如何选择
  4. cas后端返回html直接跳转,CAS验证成功后不能跳转到登陆成功的主页面解决办法...
  5. 重物码垛搬运机器人_节卡机器人:5G下的智慧物流——柔性生产物流系统
  6. So easy!10 行代码写个“让你惊叹”的文章生成器 | 原力计划
  7. DSP之时钟与定时器之一时钟发生器
  8. vep格式用什么播放器linux,vep格式视频用什么播放器打开
  9. POI导出Excel设置单元格格式
  10. Html —— 获取输入框input的值
  11. GitHub新手用法详解【适合新手入门-建议收藏!!!】
  12. Idea 中如何导入项目
  13. 挑战程序设计竞赛(算法和数据结构)——19.2九宫格拼图问题的JAVA实现
  14. git本地仓库与GitHub的同步
  15. 宝塔面板SSL证书显示不安全?这里我教你宝塔SSL证书如何配置及开启HTTPS访问的操作方法
  16. 马科维茨投资组合理论(均方模型)学习笔记——基于Matlab(二)
  17. 项目预告!根据游戏实现效果逆推代码,用C++重现FGo式战斗逻辑
  18. SAW滤波器从不切实际的离散实现中拯救无线产品
  19. 内部类(成员内部类、局部内部类、匿名内部类、静态内部类)
  20. 2021/11/13

热门文章

  1. iOS App-Mac文件共享操作
  2. Unity Render Streaming 云渲染
  3. Google已开始从Chrome浏览器中取消对 FTP 的支持
  4. 详解项目管理中任务、成本、产品三者的关系
  5. 软件工程生命周期模型对比分析
  6. 整合营销系统推荐乐云seo_珠海整合营销【乐云seo】
  7. 洛谷八连测——关于取模与思维僵化
  8. 微软Skype智能聊天机器人现登陆Mac平台和网页版
  9. 使用高匿代理访问西刺代理(假如ip被封可用高匿ip访问网站)
  10. 【Redis】回顾下Redis的过期策略