(顶者有分)如何编程得到windows media player 控件在播放时的“准备就绪”以及缓冲媒体流的百分比 (200分)

  • 主题发起人 主题发起人 qiyuanwj
  • 开始时间 开始时间
Q

qiyuanwj

Unregistered / Unconfirmed
GUEST, unregistred user!
如何编程得到windows media player 控件在播放时的“准备就绪”以及缓冲媒体流的百分比?
缓冲处理:90%
正在打开媒体;正在连接到媒体;准备就绪;已停止;正在播放等等信息。
高手请赐教,多谢!
 
你查查EC_BUFFERDATA这个消息
 
这个有点难度...
 
begin

lblState.Caption := wmp.status;
// lblState.Caption := wmp.currentMedia.name;

end;


// 注:你要实现显示状态的步骤:
// 1、开始播放,启动TIMER
// 2、在TIMER中判断播放状态,如果是播放,那么lblState.Caption := wmp.status;
// 3、其中几个属性:歌曲名称:wmp.currentMedia.Name;
procedure Tmainform.wmpStatusChange(Sender: TObject);
 
关键我想获得缓冲的百分比,这个不知怎样实现?还有由于一些原因,不能用timeer控件监视,目前我从mp的几个事件中获得了一些信息,处理状态问题不大,就是这个缓冲百分比很头疼
 
用API或消息
 
高手不要保留,多帮忙啊,谢了!谢了!
 
烦请帮忙提前,呵呵
 
来者有分,帮忙提前的兄弟有分,回答详细彻底的哥们可以到这里再拿200分!
http://delphibbs.com/delphibbs/dispq.asp?lid=1741405
 
不懂~~TIMER是可以显示百分比的,只是一些简单的数字等等我知道的就这些。
 
抓图下来自己分析
这个可行性小
简单
 
"抓图下来自己分析",不明白你的意思,呵呵
 
就是把哪个百分之多少的那个图抓下来
然后自己分析哪个数是多少
 
可怜的人:
“准备就绪”以及缓冲媒体流的百分比”
可能是textout时输出的,只有Hook函数TextOut和TextOutXY
并得知 DC的爹是MediaPlayer的窗口的DC才行!

有点那个。。。

 
with FilterGraph as IMediaPositiondo
Get_Duration(a1);
with FilterGraph as IMediaSeeking do
GetStopPosition(a2);
a1是总长度 a2是当前读取的长度
a2/a1*100就是当前的缓冲值
这个好像不是标准方法 但加个Timer 不停的取这两个值确实能算出来缓冲了多少
a1和a2不等的时候媒体文件是不会播放的。。。

这个方法是Dspack2.31下的 比较好用
WindowsMediaPlayer下 不知道怎么用IMediaSeeking和IMediaPosition这2个接口(TGUID类型的)

可能是用Form1.WindowsMediaPlayer1.GetInterface()吧
 
2 Genl:
晕!
偶认为有更好的方式,可以直接读到:),应该是MWP的属性或方法。
 
qince,:我也这样认为,如果知道这个属性或方法,应该是比较简单的,不知有没有朋友做过这方面的东西。
to Genl:Dspack2.31是什么?
 
DSPACK 是对DirectShow的DELPHI封装 的控件,效果不错,但是被DirectShow的开发高手誉为 小儿科。
 
to qince:
我也认为有好的方法可以读到。。。。。
但目前我只会用这个对付着。。。。
>>但是被DirectShow的开发高手誉为 小儿科。
这句话是对的。。看看Dspack源代码 就知道Dspack只是进行了简单的封装。。
容错性很差。。。。Codec不对的时候 很容易出一些有趣的错误(画面变形,播放窗口在播放其外面。。。。)

谁知道怎么让DirectShow指定哪个Filter进行Render啊?? 还有怎么设Merit啊
Codec装多了 播放器乱用Filter啊。。。。
Dspack好像没有涉及到这个方面 MediaPlayerClassic就能指定他自带Filter进行Render

要是解决了 我也给分
 
后退
顶部