Chinaunix首页 | 论坛 | 博客
  • 博客访问: 49032
  • 博文数量: 14
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 152
  • 用 户 组: 普通用户
  • 注册时间: 2017-07-19 11:43
个人简介

音视频 流媒体 号码:15721098449 CSDN:http://blog.csdn.net/yuanchunsi

文章分类

全部博文(14)

文章存档

2017年(14)

我的朋友

分类: C/C++

2017-08-04 16:36:36

以下是QQ物联音视频相关参数:

我方APP音视频参数

视频:H264

音频:PCM (8K采样,16bit,单通道)


中间件对外提供接口:

QQ物联连接:

接口封装参照QQ物联如下:

//初始化

inteq_initDevice();

 

//加载AV模块

inteq_start_av_service(eq_av_callback_t *cb);

 

//对接视频数据

inteq_set_video_data(unsigned char *pcEncData,int nEncDatalen,int nFrameType,intnTimeStamps,int nGopIndex,int nFrameIndex,int nTotalIndex,int nAvgQP);


//对接音频数据

int eq_set_audio_data(eq_audio_encode_param *param, unsigned char *pcEncData, int nEncDataLen, int nTimeStamps);


//缺绑定、报警上传,仍在doing。。。。。。。。。。




现象:APP播放出声音有一顿一顿的现象,不连贯。

排查过程:

1)没有丢包解码出来的PCM数据也是正常的,一开始以为Faad2解码性能太慢

2)单独测试Faad2解码接口发现一秒钟解码30多包数据,这个速度完全够了排除这个可能性

3)怀疑手机性能低,换手机,关掉视频流都不行,排除这个可能性

4)抓日志发现APP获取网络音频队列总是溢出,说明APP消耗音频数据慢与供给

5)发现APP固定一秒钟消耗5包音频数据,网络每秒供给7-8包数据,原因找到。

原因:QQ物联给的是8KHZ,单声道的AAC数据,我方APP需播放8KHZ,单声道PCM数据,咋一看没有问题,把AAC解码成PCM扔给APP的播放就可以了。但是QQ物联每次采样为128ms,APP端每200ms消耗一次,意味着QQ物联一秒钟给了8包数据,而APP每秒只能消耗5包。


解决方案1:

通过sem_init,sem_timewait,TIME_ADD,手动调试APP消耗间隔时间


解决方案2:

8KHZ,16bit,单声道,即每秒消耗:8000*2*1=16000个字节。200ms消耗3200个字节,即每秒消耗5包,每次消耗3200个字节。这样一算可以不用手动调试APP的消耗间隔时间,只要每次消耗时给足3200个字节即可。

我们再算一下QQ物联的,8KHZ,16bit,单声道,即每秒采集:8000*2*1=16000个字节。但是它一次采样128ms,则每次采样数据为:16000*(128/1000)=2048字节。故可以做个buf攒足了3200个字节在给APP的android接口播放。


阅读(484) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~