dlna测试遇到的第二个问题
来源:互联网 发布:穿越火线手游开挂软件 编辑:程序博客网 时间:2024/05/19 02:25
转自 http://blog.sina.com.cn/foreverlovelost
问题背景:一个将近300M的adts音频文件,通过服务器共享给手机终端,手机终端使用dlna应用进行播放,发现缓冲了半个小时还不能播放。
while (offset <streamSize) { if((frameSize = getAdtsFrameLength(source, offset, NULL)) == 0){ return; } mOffsetVector.push(offset); offset +=frameSize; numFrames++; } // Round up and get the duration mFrameDurationUs = (1024 * 1000000ll + (sr - 1))/ sr; duration = numFrames * mFrameDurationUs; mMeta->setInt64(kKeyDuration,duration); duration = numFrames *mFrameDurationUs;
而采用chunked编码的http协议,由于不能进入到这个if条件,所以直接跳过了这段代码,最终却能正常播放,其实这段代码也就是简单的计算时长的作用,不进来只会影响进度条右边的总时长显示为零。 最终我们解决(规避)这个问题的方法是:如果是流媒体文件且文件大小超过100M,我们就不进这个while循环了。 PS:由于放在本地播放,从内存直接拷贝数据较快,缓冲20秒左右就能退出这个循环,所以能够播放,不用规避。
问题背景:一个将近300M的adts音频文件,通过服务器共享给手机终端,手机终端使用dlna应用进行播放,发现缓冲了半个小时还不能播放。
另外不能播放对应的服务器采用的是Content-Length这种编码格式,而采样chunked这种编码方式的服务器却能够正常播放。
打log发现,在MediaExtractor中构造AACExtractor时一直没有返回,所以直接到AACExtractor构造函数中去看了。
有下面这样一段代码:
if(mDataSource->getSize(&streamSize)== OK) {
}
前面一篇博客已经看过这个if条件,如果服务器指明了文件的大小,getSize将返回OK,而且文件的大小会保存在streamSize中,不能播放的服务器指明了文件的大小,所以会进入这个if条件。
adts文件也是由一个一个frame组成,while循环在这里的作用就是从文件开始一直到文件末尾,数一共有多少个frame(numFrames),最终通过下面的公式计算出这个音频文件的时长:
总时长 = 帧数 * 每一帧的时长
问题就出现在这里,在通过流媒体来播放的时候,读取文件需要以字节的方式一个字节一个字节的从网上读取,当文件比较小的时候,这种过程我们还可以忍受范围之内,但是在这次测试中,一个音频文件有300M,这个无法忍受了,正常下载一个300M的文件都要半天,打log发现,十分钟过去了,才完成了五分之一,正是这个while循环一直不能退出,导致了不能播放。
0 0
- dlna测试遇到的第二个问题
- dlna搜索资源时遇到的问题
- 学VC++遇到的第二个问题
- Android学习(二)--第二个项目遇到的问题
- opencv第一个测试程序遇到的问题及解决
- DLNA测试
- 关于DLNA的一些问题
- 测试membership遇到的问题
- 测试中常遇到的问题
- 测试遇到的通用问题
- Juniti4 测试遇到的问题
- Spring+测试遇到的问题
- 遇到的第一个问题
- 遇到个ctags的问题
- GScript的第二个测试程序--计算器
- cling开发DLNA找不到class的问题!
- cling开发DLNA找不到class的问题!
- 第二个问题:在进行junit测试的时候,测试通过但是数据没有添加到数据库
- Java HotSpot JVM内存管理之详解
- oracle忘记用户名和密码的解决方案
- <Excel>怎么把所有文本都加上小三角?
- 测试用例之因果图
- 我是如何在SQLServer中处理每天四亿三千万记录的
- dlna测试遇到的第二个问题
- 输出HTML格式
- 如何安装Eclipse插件
- linux下 mysql主从备份
- iOS self和super各个含义
- 数据链层到网络层数据传递
- HTTP协议的chunked编码
- android使用HttpClient实现post get (+1)
- Undefined symbols for architecture x86_64: