A
asiatony
Unregistered / Unconfirmed
GUEST, unregistred user!
用DSPack 2.3.4 做定位播放器,播放的是xvid的avi文件
procedure play;
begin
if not FilterGraph.Active then
FilterGraph.Active := true;
FilterGraph.ClearGraph;
FilterGraph.RenderFile('C:/1234.avi');
SoundLevel.Position := FilterGraph.Volume;
FilterGraph.play;
end;
procedure locate;
var
zero, duration: int64;
FMediaSeeking: IMediaSeeking;
begin
//ONE_SECOND = 10000000;
Zero := strtoint(edit1.text) * 10000000;
//从第n秒开始播放
duration := 0;
try
FilterGraph.QueryInterface(IMediaPosition, FMediaPosition);
myresult := FMediaSeeking.SetPositions(Zero,AM_SEEKING_AbsolutePositioning,Duration,AM_SEEKING_NoPositioning);
finally
FMediaSeeking:=nil;
end;
end;
play后, 设置edit1 再locate.
定位 前3分34秒都没有问题,从3分35秒后就没有反应了,都是从最开始播放.
跟踪发现
当edit1.text=214 即3分34秒时 zero的值为2140000000, 可以正常定位到正确的位置播放
当edit1.text=215 即3分35秒时 zero的值为负数,就无法正常定位了.
zero我已定义为int64了.
请教各位大侠了.
谢谢
procedure play;
begin
if not FilterGraph.Active then
FilterGraph.Active := true;
FilterGraph.ClearGraph;
FilterGraph.RenderFile('C:/1234.avi');
SoundLevel.Position := FilterGraph.Volume;
FilterGraph.play;
end;
procedure locate;
var
zero, duration: int64;
FMediaSeeking: IMediaSeeking;
begin
//ONE_SECOND = 10000000;
Zero := strtoint(edit1.text) * 10000000;
//从第n秒开始播放
duration := 0;
try
FilterGraph.QueryInterface(IMediaPosition, FMediaPosition);
myresult := FMediaSeeking.SetPositions(Zero,AM_SEEKING_AbsolutePositioning,Duration,AM_SEEKING_NoPositioning);
finally
FMediaSeeking:=nil;
end;
end;
play后, 设置edit1 再locate.
定位 前3分34秒都没有问题,从3分35秒后就没有反应了,都是从最开始播放.
跟踪发现
当edit1.text=214 即3分34秒时 zero的值为2140000000, 可以正常定位到正确的位置播放
当edit1.text=215 即3分35秒时 zero的值为负数,就无法正常定位了.
zero我已定义为int64了.
请教各位大侠了.
谢谢