memfile用于网络传输MPEG文件的一些问题,请教各位!

mul 2003-03-26 09:50:26
我分配了一块比较大的内存(1M)存放数据,当这块内存未读满时,让CMemStream::Read(...)在那儿等待,直到内存存满。MemStream读完这块内存后,再从网络缓冲中读数据到这块内存,CMemStream::Read等待数据满.....如此循环。
但结果是除了第一个1M是流畅播放外,其余的(1M)的画面开始时都会停顿,过一阵子才开始播放,但已是跳了好几帧了,不过声音都是连续的,而且有如下提示出现:
quartz.dll(tid 658) 243570 : Sev 0: CSystemClock::SetTimeDelta(-5283048 us) 2795472 -> 2790189 ms.不知是什么问题,我是刚开始玩DirectShow,请各位多多指教!

...全文
49 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mul 2003-03-28
  • 打赏
  • 举报
回复
laa(阿呆) :
局域网可能可以赶上,那广域网呢。
不知象在线影院是怎么做的?
为什么迟一点给数据会有跳帧的现象,都是一样的数据,早给和迟给有什么区别?MediaSample是有一个开始和结束时间,但我修改了好像没有什么作用.




mul 2003-03-27
  • 打赏
  • 举报
回复
laa(阿呆) :
因为考虑到网络传输速度比downstream pin要求数据的速度慢。我的做法是:把接收数据不断放在一个链表里(addtail),等到了一定量时(比如1M),再把所有数据copy到一块大缓冲(1M)中,然后再把这块大内存供Read使用,同时还在不断地接收数据到链表里,直到数据量又到1M,如此循环。我的本意是可以先播放一段流畅的图像,然后悬挂等待,等数据足量后,再播放...可是却出现上述问题,不知是怎么回事?
阿呆:难道你的网络传输速度可以赶得上downstream pin要求数据的速度。

laa 2003-03-27
  • 打赏
  • 举报
回复
是不是你的数据处理不够好,Read函数尽量不要在那里等待

是不是应该边加数据,边播放?

建议看看http://www.csdn.net/cnshare/soft/11/11795.shtm的处理方法。

在这个处理方法中,可能还要看看你的Read函数恒定时,一次读取多少数据

我的经验:我也开了1M的缓冲,

1、当Read函数恒定读取131072时,用本地的文件测试没有问题。
2、当Read函数恒定读取1638时,本地的文件测试就一顿一顿的,可能是过于频繁地拷贝内存
(我做的时候,分别用了不用的解码器,所以Read函数恒定读取的数据量不一样)

针对一次读取较少数据,像陆其明处理方法,用链表当缓冲,一个节点保存Read函数恒定读取的数据量,Read的时候读链表头;AddBuf时就加到链表尾部


我现在还没有发现问题,如发现什么问题,大家讨论讨论

laa 2003-03-27
  • 打赏
  • 举报
回复
呵呵……这边网络速度可以赶的上的

我也是新手,刚刚改造成功一个memfile例子,对于DShow还一点都不了解。

建议找 DivXExtend() ,他是这边的高手,我就是在他的指点下完成一些东西的。

新开一个帖,挂上他的大名,呵呵……他总会进去看看吧!

2,553

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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