要读约600M的流媒体文件并显示,如何能做到流畅地边读取媒体文件边播放呢?

dream_in_iceage 2004-05-10 04:22:44
在双CPU的机器上播放一个几百兆的流媒体文件,每桢图约1M,黑白图像,没有压缩。我是这样做的:分配两块内存区,当显示一块内存区的数据时,开一个线程将文件内容读入另外一快内存区,这样交替进行。但是这样在两块内存区切换的地方有时会有停顿的现象,有时甚至会有停掉的现象,因为在等待读取文件的线程。请问怎样优化呢?现在我的创建线程的方法还是针对单CPU的,如果改为针对双CPU分配线程,会好一点吗?
...全文
71 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gffly 2004-05-12
  • 打赏
  • 举报
回复
播放媒体文件,使用DirectShow来做是最合适不过的了(如果你的系统能用的话)。何必费尽心思去自己设计缓存、线程啊的,DirectShow应用框架都做好了!

而且Directshow中设计了Quality Control机制,即使你的读数据速度跟不上,DirectShow也能通过这个机制来有效地调整播放。

http://hqtech.nease.net
=======================================

并不是所有的软件都是在microsoft的平台下开发的,其他没有DirectShow可用的平台,怎么办??
xdspower 2004-05-11
  • 打赏
  • 举报
回复
你硬盘都读不赢的
hell190109 2004-05-10
  • 打赏
  • 举报
回复
硬盘的读取速度是8M/S ? 不会吧,什么硬盘呀?

15帧的话就是每秒15M,一般的硬盘都没问题的。开大缓冲区,比如开个30帧的,开始前先把他读满,播放现成启动,读盘线程不断监测,检测到缓冲区内放出10帧时,一次性读再入10帧。
happydeer 2004-05-10
  • 打赏
  • 举报
回复
播放媒体文件,使用DirectShow来做是最合适不过的了(如果你的系统能用的话)。何必费尽心思去自己设计缓存、线程啊的,DirectShow应用框架都做好了!

而且Directshow中设计了Quality Control机制,即使你的读数据速度跟不上,DirectShow也能通过这个机制来有效地调整播放。

http://hqtech.nease.net
dream_in_iceage 2004-05-10
  • 打赏
  • 举报
回复
每秒15帧,每帧约1M, 而硬盘的读取速度是8M/S ,这样的话,读的速度赶不上写的速度,
可不可以开多个线程读文件。每个线程读整个内存区的一部分数据。
hell190109 2004-05-10
  • 打赏
  • 举报
回复
每秒多少帧?
hell190109 2004-05-10
  • 打赏
  • 举报
回复
内存区两个是不保险的,要开一个大一点的缓冲区,一个线程从硬盘读数据放到缓冲区,另一个线程做显示。

2,543

社区成员

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

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