深入研究: TMediaPlayer控件使用、流、TNMUdp(分数不够,可以再加...欢迎加入讨论)

tongdings 2002-09-16 11:31:55
//说明:1、2 为重点讨论内容。

1、MediaPlayer组件怎么播放指定的缓存流?而不是通过文件名指定?
此问题的来源于:在设计两台主机通讯时,使用Udp协议;
2、TNMUdp在播放流媒体时,是怎么处理缓存的(UDP最大缓存:2048 Bytes),怎么分割流?


3、附带小问题:
//写在前面:

//程式要求实现,在单击Bitbtn时,popmenu弹出点在BitBtn的(left,top)
//处,调用API:TrackPopupMenu(self.PopupMenu1.Handle,TPM_LEFTALIGN or
// TPM_BOTTOMALIGN,sp.x,sp.y,0,self.Handle,nil);
// 已实现,不过这样很没劲。希望有另解:

//以下程式实现:
//通过计算PopupMenu的高度而实现它的具体定位的,
//此程式有bug,就是第一次单击PopMenu出现在屏幕的不定区域,不知何故?
//程式要求实现,在第一次单击Bitbtn时,popmenu弹出点在BitBtn的(left,top)
//处,
//程式还在完善当中。

//如果能重载PopupMenu中的方法,实现弹出点在PopupMenu的左下角或者右下
//角,问题就好办了,期待高手...

//以下是我的实现方式,请改善之,谢过了先

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, StdCtrls, Buttons, ExtCtrls;

type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
BitBtn1: TBitBtn;
Open: TMenuItem;
Save: TMenuItem;
N1: TMenuItem;
Exit: TMenuItem;
N2: TMenuItem;
N21: TMenuItem;
N51: TMenuItem;
N61: TMenuItem;
N3: TMenuItem;
N71: TMenuItem;
procedure BitBtn1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
Function GetPopMenuHeight(Sender: TObject): Integer;
//获得PopupMenu菜单项的总高度
{ Public declarations }
end;

var
Form1: TForm1;
tHeight: Integer;

implementation


{$R *.DFM}

//获得PopupMenu菜单项的总高度
Function TForm1.GetPopMenuHeight(Sender: TObject): Integer;
var
i,mHeight,sHeight: Integer;
vRect: TRect;
begin
sHeight := 0;
//mHeight := 0;

for i := 0 to PopupMenu1.Items.Count - 1 do
begin
GetMenuItemRect(self.Handle, PopupMenu1.Handle, PopupMenu1.Items[i].MenuIndex, vRect);
mHeight := vRect.Bottom - vRect.Top; //每个菜单项的高度
sHeight := sHeight + mHeight;
end;

result := sHeight;
end;

procedure TForm1.BitBtn1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
ScrP: TPoint;
begin
tHeight := GetPopMenuHeight(self);

x := BitBtn1.Left;
y := BitBtn1.Top - tHeight;

ScrP := ClientToScreen(point(x,y));
if Button = mbleft then
PopupMenu1.Popup(scrp.x,ScrP.y);
end;

end.

//the end of program


...全文
54 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
tongdings 2002-11-16
  • 打赏
  • 举报
回复
不清楚啊。有高手做过么?希望能出手!
chenjun631 2002-09-29
  • 打赏
  • 举报
回复
能不能像播放RC文件中的WAV文件那样处理??
tongdings 2002-09-28
  • 打赏
  • 举报
回复
to 楼上的兄弟
嗯.
MediaPlayer好像只有通过存为文件后,才能处理吧?
这样很不方便吧,而且还要求有一定的实时性(监控功能)阿,难了.
我可能改用directshow,哪位能提供相关技术的介绍么?
感激!(分数不够可以再加,多阿可用分)
blazingfire 2002-09-27
  • 打赏
  • 举报
回复
MediaPlayer没有相关的流属性(赎我孤陋寡闻)。这可能是你程序不好迂跃的难题。祝你好运。
tongdings 2002-09-27
  • 打赏
  • 举报
回复
DirectShow相关是怎样的?
哪位能说说么?
tongdings 2002-09-24
  • 打赏
  • 举报
回复
目前的情况是: 我数据流的分割发送及接收已经搞定.
但是不知道通过TMediaplayer播放,或者是其它的.
请高手指点阿
jjdelphi 2002-09-24
  • 打赏
  • 举报
回复
不能够帮你.帮你UP
tongdings 2002-09-24
  • 打赏
  • 举报
回复
to chenjun631(小菜)
好像上面两处我去过,但是还是要谢谢你
回头给你加分
具体实现得看时间阿,老总说话了.
惨了...
chenjun631 2002-09-24
  • 打赏
  • 举报
回复
还有这里
http://www.streamingbyte.com/
步骤:
1: 登陆http://www.streamingbyte.com/
2: 选择方案
3:下载相应SDK
开发啊
chenjun631 2002-09-24
  • 打赏
  • 举报
回复
http://www.avsuper.com/chs/index.html 你看看这里有没有你要的吧
chenjun631 2002-09-24
  • 打赏
  • 举报
回复
先看看TMediaPlayer的源码先,呵呵
tongdings 2002-09-24
  • 打赏
  • 举报
回复

就没人知道么?

???
tongdings 2002-09-20
  • 打赏
  • 举报
回复
谁有做过用TMediaPlayer播放局域网上的流式文件(.mpg,.mpeg或者.asf)?
期待...
tongdings 2002-09-18
  • 打赏
  • 举报
回复
to lvxq(吕歌)

真是太感谢你了。难得你从大富翁跑到这儿。

你的建议不错,
不过,我这儿还有一个问题就是:UDP数据包的拆分和重组问题。
能否给我简单讲讲UDP的收发机制呢?
期待...
lvxq 2002-09-18
  • 打赏
  • 举报
回复
哟,我可真没想到,这里非要我注册,害我白打了一大堆。
对于你这里提及的1/2,我想说的一点是,没有多少人会用MEDIApLAYER控件来播放流媒体。而我的建议是使用DIRECT DRAW, DIRECT SHOW,你会发现很简单。因为MEDIAPLAYER做的东西,总觉得有点那个。
对于你的3,我想,如果你觉得POPUPMENU不是那么符合你的意思,你可以自己定制,你不一定非要在POPUPMENU的基础上继承。如果你的菜单是固定的,你完全可以用PANEL上载入图片的方式来实现。然后你要做的就是根据鼠标在菜单上的位置来判断应该“选择”哪个而已。
对于你在email中提到的金属框,我想我喜欢的方式,以及我公司,和一些我认识的别的公司的方法都是这样的:
用photoshop做好一些你自己满意的图片作为界面,然后根据不同的需要调用不同的图片。在程序里做,不可取,倒不是很难,我想是很烦。但是这个你必须考虑不同分辨率下的问题,但实际上这也不难。

好了,简单的回答一点吧
nzfboy 2002-09-18
  • 打赏
  • 举报
回复
吕歌: DIRECT DRAW, DIRECT SHOW是一个什么控件?
在那里可以下载?
tongdings 2002-09-18
  • 打赏
  • 举报
回复
我现在主要想实践一下,以后用它传实时数据吧。
其它的原因就是实现流的操作。
lvxq 2002-09-18
  • 打赏
  • 举报
回复
你的另一个问题,我在那里已经回答了,
其实我现在也不去大富翁了,:)
UDP的机制很方便,但不可靠,你可以采用TCP/IP,方法大致一样,而且我看到别人已经有说明了。
tongdings 2002-09-17
  • 打赏
  • 举报
回复
up/gz 均有分...
大家踊跃点。
tongdings 2002-09-16
  • 打赏
  • 举报
回复
我现在在做一个流媒体的播放器,
恳请希望高手不吝赐教。急阿...
加载更多回复(3)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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