请教:brew平台流式播放mp3问题

BuleRiver 2010-11-18 05:38:43
大家好,我使用IWEB接口下载mp3数据,然后保存到一个缓冲区中,使用IMEDIA接口在该缓冲区中读取数据,进行播放,就是一边下载,一边播放,在华为C5900上,我打了日志,读取数据看起来完全正确,但是在播放的时候,听起来好像前面的一部分数据好像被揭掉了,中间也被跳过了一些,后面的就都正常了。
我看了一下,大概莫名其妙的被删除了13秒。
请大家帮忙,谢谢!!!
...全文
544 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
BuleRiver 2011-01-16
  • 打赏
  • 举报
回复
谢谢大家的指点。
现在开头可以播放完整了,但是最后若干秒不能播放出来。
请大家指点。
BuleRiver 2011-01-10
  • 打赏
  • 举报
回复
我写了一个简单的测试程序,验证了brew流式播放的问题:

int ret = 0;
AEEMediaDataEx md;
IFileMgr* pMgr = NULL;
ISourceUtil* psu = NULL;

pMe->DeviceInfo.wStructSize = sizeof(pMe->DeviceInfo);
ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&pMe->DeviceInfo);

ret = ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_MEDIAMP3, (void**)&pMe->m_pIMedia);
if (SUCCESS != ret)
{
return FALSE;
}
// 设置数据
ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_FILEMGR, (void**)&pMgr);
pMe->m_pIFile = IFILEMGR_OpenFile(pMgr, "test.mp3", _OFM_READ);
IFILEMGR_Release(pMgr);

ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_SOURCEUTIL, (void **)&psu);
ISOURCEUTIL_SourceFromAStream(psu, (IAStream *)pMe->m_pIFile, &pMe->m_pISource);
ISOURCEUTIL_Release(psu);
MEMSET(&md, 0, sizeof(md));
md.clsData = MMD_ISOURCE;
md.pData = (void*)pMe->m_pISource;
md.dwSize = 0;
md.dwStructSize = sizeof(md);
md.dwCaps = 0;
md.bRaw = FALSE;
md.pSpec = NULL;
md.dwSpecSize = 0;
ret = IMedia_SetMediaDataEx(pMe->m_pIMedia, &md, 1);
if (SUCCESS != ret)
{
IMEDIA_Release(pMe->m_pIMedia);
return FALSE;
}

直接播放音乐可能不太明显,因为我的应用是播放人说话的,少了几个字,可以很明显的感觉出来。大家可以测试一下。
BuleRiver 2010-12-25
  • 打赏
  • 举报
回复
我是这样来实现的:
1、使用IWEB下载HTTP数据
2、从IASTREAM接口继承了一个类,命名为IAUDIOSTREAM,拥有自己的一个缓冲区,缓冲区是自己实现的,IASTREAM可读,可写。
3、当从IWEB下载到数据的时候,就把数据写入IAUDIOSTREAM中的缓冲区中。
4、使用一个接口,可以从一个IASTREAM接口,产生一个ISOURCE。
5、使用产生的这个ISOURCE,设置IMEDIA数据
6、开始下载数据
7、当下载达到20K的时候,开始播放
BuleRiver 2010-12-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 loseleo 的回复:]
首先尝试全部下载完播放会不会有问题,如果不会有问题那就不是音乐文件格式的问题;
然后确保每次ISOURCE_Read 完毕后再调用ISOURCE_Readable,并检查有没有buffer被多次写;
还有就试验用IFILO来存取buffer ,参考http://www.brewmpchina.com/BrewSDK/thread-326-1-1.aspx?postID=1577&pag……
[/Quote]
使用IFIFO的文章我已经拜读了,对我有很大的启发。不过还有一个问题:
播放器使用IFIFO进行读取数据,而我们有数据的时候直接把数据写入IFIFO,如果网络数据比较慢,不知道播放器那边会发生什么情况。
loseleo 2010-12-07
  • 打赏
  • 举报
回复
首先尝试全部下载完播放会不会有问题,如果不会有问题那就不是音乐文件格式的问题;
然后确保每次ISOURCE_Read 完毕后再调用ISOURCE_Readable,并检查有没有buffer被多次写;
还有就试验用IFILO来存取buffer ,参考http://www.brewmpchina.com/BrewSDK/thread-326-1-1.aspx?postID=1577&page=1&SearchMode=TopicContent&searchText=IFIFO


--www.BrewMpChina.com 狮子
才看到你的留言哈,上周末出差了。
faithzzf 2010-12-01
  • 打赏
  • 举报
回复
围观学习一下
BuleRiver 2010-11-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xiaokanjinghong 的回复:]
有两种可能,
1)下载的音频文件格式头字段定义有问题,比如data offset什么的不正确。
2)Qtv的Bug,不知道楼主用的是高通的哪一个平台的base
[/Quote]
不太清楚您说的base是什么意思,我使用的SDK版本号是3.1.5,我使用的测试手机是华为C5900
BuleRiver 2010-11-29
  • 打赏
  • 举报
回复
目前的结论是,前面的若干秒,确实是被系统播放器丢掉了,我送给播放器的音频数据是没有问题的,但是播放的前几秒播放不出来,例如音频数据(歌词,仅仅举个例子表示)是:
"闻君有白玉美人,妙手雕成,极尽奶态,不胜心向往之。今夜子正,当踏月来取,君素雅达,必不致令我徒劳往返也。"
但是播放出来的是:
"子正,当踏月来取,君素雅达,必不致令我徒劳往返也。"
liahr 2010-11-29
  • 打赏
  • 举报
回复
学习学习,帮你顶。。。
xiaokanjinghong 2010-11-29
  • 打赏
  • 举报
回复
有两种可能,
1)下载的音频文件格式头字段定义有问题,比如data offset什么的不正确。
2)Qtv的Bug,不知道楼主用的是高通的哪一个平台的base
BuleRiver 2010-11-23
  • 打赏
  • 举报
回复
大家都没有做过brew平台的流媒体吗?
用HTTP协议的,不是RTSP协议的
BuleRiver 2010-11-19
  • 打赏
  • 举报
回复
请问,使用brew logger打的日志,会不会漏掉一些日志?
BuleRiver 2010-11-19
  • 打赏
  • 举报
回复
我再次打出了日志,打出的日志非常奇怪:
正在调用Read()函数的时候,突然跳到了Readable()函数中。

949

社区成员

发帖
与我相关
我的任务
社区描述
为开发者提供高通丰富的解决方案及全面技术下载内容。本版以AI人工智能、WoS移动笔记本、XR、IoT 物联网、Auto 汽车、生成式AI等核心板块组成,为开发者提供一个便捷及高效的学习交流平台。
人工智能物联网机器学习 企业社区 北京·东城区
社区管理员
  • Qualcomm开发
  • csdnsqst0050
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧