几个MeidaPlayer的问题(5分)

  • 主题发起人 amartapple
  • 开始时间
A

amartapple

Unregistered / Unconfirmed
GUEST, unregistred user!
1、使用MedaiPlayer在一个窗体上显示,怎么让窗体随不同影片的长宽变化,或使影片占全整个窗体
2、用TrackBar->Position=MediaPlayer->Position来显示文件的播放进度,但是播放时确是一顿一顿的,怎么解决
3、问什么播放avi文件时崩溃,不是MediaPlayer支持么,MedaiPlayer支持Mp3么
4、怎么才能播放rm文件和flash
 
没人会么,回哪个就说哪个
 
1 没明白问的什么意思...
2 在TrackBar的事件里设 就是当拖动的时 先pause 拖完 再play 太久没用了 忘了
3 是不是DivX的AVI啊......标准AVI没问题的
4 MediaPlayer好像播不了
 
1.设置Display及DisplayRect属性
2.把你的代码贴出来,我用的很正常的.用一个Timer控制播放时的进度(TrackBar)
3.标准AVI没问题 应该是不支持mp3
4.利用ShockwaveFlash(ACTIVEX)播放flash,利用MedaiPlayer本身实现不了


 
对MediaPlayer有兴趣的。可以贴个邮箱出来,我发个我用delphi做的MediaPlayerXP过去,
可以放rm系列和MediaPlayer系列,可以调颜色,亮度,在桌面的DC播放,不用跳出属性页该
mpg.dat文件的左右声道
[:)][:D][8D][:(][:(!][^]
打广告了
 
4点以前有效
 
不好意思,我刚看到,amartapple@sian.com
如果不可以了,说一下我的问题也可以,谢谢
再添一个问题,如果想判断正在播放的文件类型,是在OpenDialog中判断,还是在MediaPlayer
中判断,怎么判断
 
上面的信箱错了,应该是amartapple@sina.com
 
TO yuki2003
我也想学学。wumengs@sina.com.cn
 
to:IO321
1.我的意思是像超级解霸那样,当影片是4:3时,你只能让他按4:3缩放,而不能拖拉
成别的长宽比,16:9时同样
2.我不是要通过拖拉trackbar来改变mediaplayer的position,而是让trackbar的position
随mediaplayer的position变化,但是这样会一顿一顿的,不知为什么
3.非标准的怎么办
to:bxqxb
2.是我的代码,timer的interval设置为10
void __fastcall TMainForm::TimerTimer(TObject *Sender)
{
//显示进度
TrackBar->Position=MediaPlayer->Position;
}
3.非标准的avi怎么办。我的现在就支持mp3,但mediaplayer不是不支持mp3么,我想
知道这是怎么回事,我想可能是因为我装了东方影都,我怎么才能找出支持mp3的那个dll,
或ocx
谢谢大家

 
如果在TimerTimer中设置了
TrackBar->Position=MediaPlayer->Position;
就不要在TrackBar的Change中反过来
MediaPlayer->Position=TrackBar->Position
我是用两个TPanel用其中一个只读的TPanel的width表示Position
然后用另一个TPanel的MouseUp设置Position
 
//当影片是4:3时,你只能让他按4:3缩放,而不能拖拉
按比例/伸展播放,当原来是伸展是,
参考//返回的TRect(容器的TRect,影片的原始TRect)
function RectPlus(R, IR: TRect): TRect;
var
iW, iH: Integer;
rW, rH: Integer;
begin
iW := IR.Right - IR.Left;
iH := IR.Bottom - IR.Top;
rW := R.Right - R.Left;
rH := R.Bottom - R.Top;
if (rW / iW) < (rH / iH) then
begin
iH := MulDiv(iH, rW, iW);
iW := MulDiv(iW, rW, iW);
end
else
begin
iW := MulDiv(iW, rH, iH);
iH := MulDiv(iH, rH, iH);
end;
SetRect(Result, 0, 0, iW, iH);
OffsetRect(Result, R.Left + (rW - iW) div 2, R.Top + (rH - iH) div 2);
end;
我在显示图片是也是这样的
 
Windows Media Player能播发文件,Directx都支持的不用找dll,其实Windows Media Player连*.gif,*.jpg 文件都当是影片,gif是可以动画的
 
播放rm系列可以参考我的一段代码
procedure TMainForm.Media_OpenRM(Filter: string);
begin
Media_FileName := Filter;
Media_Faee;
RealAudio := TRealAudio.Create(nil);
RealAudio.controls := 'ImageWindow';
RealAudio.Parent := Panel_TV;
RealAudio_OnPlayStateChange := RealChange;
RealAudio.Align := alClient;
RealAudio.Source := Filter;
RealAudio.DoPlay;
end;
 
to:yuki2003
请把你的代码给我看一下,我这样写的
void __fastcall TMainForm::TimerTimer(TObject *Sender)
{
//显示进度
TrackBar->Position=MediaPlayer->Position;
}
void __fastcall TMainForm::TrackBarKeyUp(TObject *Sender, WORD &amp;Key,
TShiftState Shift)
{
MediaPlayer->Position=TrackBar->Position;
}
现在播放正常了,可是拖拉TrackBar却不能改变进度了
谢谢你,后两个贴我还没看,看后在把问题反馈给你
 
to:yuki2003
>我是用两个TPanel用其中一个只读的TPanel的width表示Position
>然后用另一个TPanel的MouseUp设置Position
已经按你上面的方法解决了,不过和你的程序对比了一下,当拖动进度时,还是有些延时,
能不能给我看看你的代码
谢谢
 
to amartapple
这是我播放器中的代码,
procedure TMainForm.Media_SetPos(X01, X02: Int64);
var
n2, SStop: Int64;
begin
if Duration > 0 then
begin
n2 := round(Duration * (x01 / x02)) * 10000000;
if MediaSeeking <> nil then
MediaSeeking.SetPositions(n2, AM_SEEKING_AbsolutePositioning, SStop,
AM_SEEKING_NoPositioning);
n2 := round(Duration * (x01 / x02)) * 1000;
if RealAudio <> nil then
RealAudio.SetPosition(n2);
TimerOSD.Tag := 3;
YukiSkins.POS_BMP.Width := round(YukiSkins.Image1.Width * x01 / x02);
end;
end;

procedure TYukiSkins.Image1MouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
if Button = mbLeft then
MainForm.Media_SetPos(x, Image1.Width)
end;

//YukiSkins.POS_BMP跟procedure TYukiSkins.Image1重叠在一起
>当拖动进度时,还是有些延时,
不明白你指的是什么,如果事件一发生,MediaSeeking.SetPositions立刻就执行了,
有些文件拖动时会有延时,如*.wmv。
如果用MouseUp事件只执行一次,如果用move,Change事件,要执行好几次,
因为在Timer事件中设置了TPanel.width:=MediaSeeking.Positions;
所以在MouseUp事件中我是用X做参数不是用TPanel.width

 
>当拖动进度时,还是有些延时,
>>不明白你指的是什么,如果事件一发生,MediaSeeking.SetPositions立刻就执行了,
MediaSeeking.SetPositions是你自己定义的么?
我的意思是当我点击Panel2时,并不是直接就快进到了我点击的进度,而是停顿大约1秒种,
才快进到了我点击的进度
这是我的代码:
panel1在上面
//显示进度
void __fastcall TMainForm::TimerTimer(TObject *Sender)
{
float ra=float(Panel2->Width)/MediaPlayer->Length;
Panel1->Width=(MediaPlayer->Position)*ra;
}
//改变进度
void __fastcall TMainForm::panel2MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
float ra=float(X)/Panel2->Width;
MediaPlayer->Position=MediaPlayer->Length*ra;
}

 
是不是你的Timer事件过了1秒才执行;
//改变进度
void __fastcall TMainForm::panel2MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{ float ra=float(X)/Panel2->Width;
MediaPlayer->Position=MediaPlayer->Length*ra;
TimerTimer(nil);
}
 
是呀是呀,
不过你的代码不通过呀
没有定义nil,我用的是bcb,不是delphi
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
920
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部