SMS流媒体服务器-MPEG-PS流的深度解析

1.简介

        ps流的解析,只要按照标准文档对照16进制的流数据,基本都能看的明白。但是实际项目中会碰到各种各样的问题。本文将对如何高效的解析出音视频数据发表一下个人的看法。

        介绍一下本人的开源流媒体,点个star,有兴趣一起开发的朋友也可以联系本人:SimpleMediaServer(流媒体): 旨在开发一个可商用的,功能丰富、高性能、高可扩展的流媒体服务。支持RTSP、RTMP、WEBRTC、GB28181、HTTP-FLV、HLS、JT1078等协议。各个协议可以单独剥离出来,相互独立;也可以互相转换协议。有兴趣一起开发开源项目的朋友可以联系本人(qq 1084855601),包括且不限于音视频后端、信令开发、控制台,前端等。icon-default.png?t=N7T8https://gitee.com/inyeme/simple-media-server

2.获取音视频轨道

        大部分设备发送的ps流,在ps map头里会有音视频的编码信息,这时,直接读取ps map头里的编码信息,就可以初始化音视频track了,等待获取到视频的sps,pps等信息,音视频track也就完全初始化好了。

        但是有一部分的设备,音频的ps map和视频的ps map是两个独立的包,而且两个包之间间隔好几秒,这时候就没法通过某一个ps map包来初始化音视频的track,而是需要集齐两个ps map才行。然而,当一个设备的ps流里只有视频流时,这种情况是没法通过解析视频的ps map去判断,该设备后面会不会发ps map,如果想要确定,那就得等待。然而等待多久,就成了一个问题,如果后续没有音频的ps map,等再久也没用,但是等待的时间短了,可能会丢失掉音频的ps map。

        这时候,就需要根据其他的信息来进行判断了。在ps流里,一般情况下,视频包的startcode是E0,音频包的是C0,我们可以根据收到的包情况判断出,该ps流里是否有音频,尽管这时候不知道音频编码格式。如果有音频,那么就等待音频的ps map,如果没有音频包,那收到视频的ps map之后,就可以认为该流已经初始化好了。

        除了这种比较坑的设备,还有一种也很恶心,那就是ps map里解析出设备的音频格式是g711a,但实际上设备发过来的确是aac。这种情况,需要在收到音频数据时,再去判断一下该流是不是aac音频流,如果是的,更新一下音频编码格式。视频编码也会碰到这种对不上的情况,但是视频的判断比较麻烦,不如直接去修改设备配置了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值