vod笔记

从网口过来的媒体原始数据,
首先RTP检测,
接着Mediaopen  打开解码器,
再processTSPayload  处理ts流,
然后WriteDatatoBuf 将数据写入到bufman中,
之后,就可以把数据送入到 插件中了;

最后 插件输出的数据就送入解码器了PutMediaBuf。

nFirstFrame;   /*标志位: 0 开始解码,还未解码出第一帧, 1: 已经解码出第一帧, 2: 已经显示了第一帧,需要进行慢同步*/
uiEscapeTime;   /*解码时间,用于延缓解除静音,避免爆音*/

音视频都判断;判断最后一帧是否播放结束 :直接用帧数量来决定是否播放结束。
在解码器工作过程中,vodCheckBufSize 获得解码芯片缓冲区情况,判断上下溢的同时,
tBufferBytes[i32DecoderID].uiTotalsize = pBufStatus->buffer_size;解码器缓冲区可以容纳的数量
g_atDecManager[i32DecoderID].uiDecFrameCnt =  pBufStatus->buffer_data_size 解码器缓冲区中的帧数。

上层发出EOS事件,置EOS为解码器标志。decprocess 不断监测这个标志,然后记录当前check时间,比较lastcheck时间大于800ms并且
g_atDecManager[i32DecoderID].uiDecFrameCnt 即当前解码器中帧数和上一次记录的解码器帧数s_uiDecodedFrameCnt[i32DecoderID] 是否相等,
如果上面条件成立,没有数据过来,代表播放完,将解码器关闭。

目前的机顶盒主要采用 arm+dsp dsp用来解码。

linux音频驱动包含两个基本的音频设备:1,mixer(混音器),作用是叠加多个信号,对应设备文件:/dev/mixer.其大部分操作是通过ioctl()完成的。2,DSP 也称编码器,对应的设备文件是/dev/dsp,向该设备写数据意味着播放。而向该设备读数据则意味着录音。读到的数据从内核缓冲区复制到应用缓冲区,这个中间就有一个谁快谁慢的问题。当应用缓冲区慢了则会阻塞,多余的数据会被丢弃。应用读取过快,则会被驱动程序阻塞掉直到新的数据到来为止。同样,播放时也有一个缓冲区,也有写入速度快慢的问题,过慢的话,会产生声音暂停或者停顿的现象。,写入过快的话,会被内核驱动阻塞掉,直到硬件有能力处理新的数据。使用ioctl可以对缓冲区大小设置。设置单声道,立体声等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值