如何做一个播放视频的activex控件(分不够再加)

ltprogram 2003-10-15 05:18:44
我想做一个播放视频的activex控件,就如同Active Movie一样,请赐教。
...全文
291 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
cllr 2003-12-05
  • 打赏
  • 举报
回复
ActiveX本身就是CWnd,和一般的窗口一样创建就行了,至于如果你外部想要你的控件干什么,就暴露出某个方法就行了啊,只需要在适当的时机调用该方法就行啊;既然你内部逻辑已经做好了,封装到你的ActiveX中,就可以了吧!不知道你还有什么其他要求啊?
hohai 2003-12-04
  • 打赏
  • 举报
回复
ltprogram(流水),为什么我在控件工程中一LINK strmbase.lib,运行就出错?
liuYouETong 2003-12-01
  • 打赏
  • 举报
回复
ltprogram(流水) ,我的问题和他一样,请高手继续顶啊! 我在这里谢谢了!
ltprogram 2003-11-13
  • 打赏
  • 举报
回复
怎么没人回应呀???
还望各位大虾不吝出手。
ltprogram 2003-11-11
  • 打赏
  • 举报
回复
神牛,我是把原来的应用程序的接收和显示视频的功能封装成一个类,就是CShowTool。我的原意是当该activex组件一起动就开始接收并显示视频流。组件的行为方式并没有改变。请指点迷津。
qrlvls 2003-10-31
  • 打赏
  • 举报
回复
你如何控制你的组件接收视频流的,从应用程序改过来之后组件的形为方式有哪些变化?
Microsoftadherent 2003-10-31
  • 打赏
  • 举报
回复
先只让它创建窗口,不去读视频流,看看能否成功创建,确定一下问题发生在哪里?
ltprogram 2003-10-28
  • 打赏
  • 举报
回复
qrlvls(忍者神牛) ,我按照你的方法成功的创建了一个视频播放窗口,谢谢了!
或许是小弟愚鲁,创建成功的视频播放窗口却不能接收到视频流,望不吝赐教。

1.创建窗口函数
HRESULT CShowTool::StartShow(HWND hWnd,CRect rc)
{
MSG msg={0};
HRESULT hr;
WNDCLASS wc;
HINSTANCE hIns;
// Initialize COM
if( FAILED( CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)))
{
Msg(TEXT("CoInitialize Failed!\r\n"));
exit(1);
}

//注册网络传输组件dsnet.ax
LPTSTR ComName=_T("dsnet.ax");
BOOL bRet=RegisterCom(ComName);
if(!bRet)
{
Msg(TEXT("注册网络传输组件失败!\r\n"));
exit(1);
}
hIns=::AfxGetInstanceHandle();
// Register the window class
ZeroMemory(&wc, sizeof wc);
wc.lpfnWndProc = WndMainProc;
wc.hInstance = hIns;
wc.lpszClassName = CLASSNAME;
wc.lpszMenuName = NULL;
wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(hIns, MAKEINTRESOURCE(IDI_VIDPREVIEW));
if(!RegisterClass(&wc))
{
Msg(TEXT("RegisterClass Failed! Error=0x%x\r\n"), GetLastError());
CoUninitialize();
return E_FAIL;
}

// Create the main window. The WS_CLIPCHILDREN style is required.
ghApp = CreateWindow(CLASSNAME, APPLICATIONNAME,
WS_OVERLAPPEDWINDOW | WS_CAPTION | WS_CLIPCHILDREN,
CW_USEDEFAULT, CW_USEDEFAULT,
DEFAULT_VIDEO_WIDTH, DEFAULT_VIDEO_HEIGHT,
0, 0, hIns, 0);

if(ghApp)
{

// Create DirectShow graph and start capturing video
hr = CaptureVideo();
if (FAILED (hr))
{
CloseInterfaces();
::DestroyWindow(ghApp);
}
else
{
// Don't display the main window until the DirectShow
// preview graph has been created. Once video data is
// being received and processed, the window will appear
// and immediately have useful video data to display.
// Otherwise, it will be black until video data arrives.
::SetWindowPos(hWnd,HWND_BOTTOM,rc.left,rc.top,rc.Width(),rc.Height (),SWP_DRAWFRAME);
::ShowWindow(ghApp, TRUE);
}

while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return hr;
}



2.回调函数
LRESULT CALLBACK WndMainProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
CShowTool sst;
switch (message)
{
case WM_GRAPHNOTIFY:
sst.HandleGraphEvent();
break;

case WM_SIZE:
sst.ResizeVideoWindow();
break;

case WM_WINDOWPOSCHANGED:
sst.ChangePreviewState(! (::IsIconic(hwnd)));
break;

case WM_CLOSE:
// Hide the main window while the graph is destroyed
::ShowWindow(sst.ghApp, SW_HIDE);
sst.CloseInterfaces(); // Stop capturing and release interfaces
break;

case WM_DESTROY:
PostQuitMessage(0);
return 0;
}

// Pass this message to the video window for notification of system changes
if (sst.g_pVW)
sst.g_pVW->NotifyOwnerMessage((long) hwnd, message, wParam, lParam);

return ::DefWindowProc (hwnd , message, wParam, lParam);
}

ltprogram 2003-10-27
  • 打赏
  • 举报
回复
谢谢神牛,让偶试试。
qrlvls 2003-10-27
  • 打赏
  • 举报
回复
如果你使用 DShow 的方法进行播放,你可以在控件中 Create 动态创建一个窗口,用SetWindowPos 把窗口设置为和控件一样大小(当然这个窗口就是你所用来支持DShow的东东)
剩下的工作量是移植你的代码,内容并不太多
qrlvls 2003-10-27
  • 打赏
  • 举报
回复
其实做控件并不太麻烦,你只要试着去做就行了
把你的代码移植到新的控件工程中去,添加必要的方法和属性就可以了
yaoha2003 2003-10-25
  • 打赏
  • 举报
回复
UP
hbffff 2003-10-25
  • 打赏
  • 举报
回复
各位大侠,我要做一个对话框的activex控件,在上面放置media player控件。
问题如下:
做一个对话框的activex控件,如果在上面放置普通控件如edit等,没有问题。
但如果“insert activex control”,插入media player控件。则测试时报错“debug assertion failed”。对话框无法显示。
不知何故。
yintongshun 2003-10-16
  • 打赏
  • 举报
回复
用已经成型的控件最好了,如果是RM那只能用REAL公司的了,他又不公开源代码所以只有在安装的机器上注册他的控件了
flyingjust 2003-10-16
  • 打赏
  • 举报
回复
简单的你可以如 microran2000 复杂的你可以用 DShow
主要看你要完成什么功能
ltprogram 2003-10-16
  • 打赏
  • 举报
回复
谢谢以上各位的解答,我想使该控件具备网络接收能力。
我现在已经用DShow做了一个程序,能够接受服务器端组播过来的视频流并播放之。
现在的问题是我想把它转为一个ActiveX控件,以便嵌套在web中,
请各位大虾指点迷津。若能提供样例源码更好。
我准备了300分。
flyycyu 2003-10-15
  • 打赏
  • 举报
回复
或者你购买一些视屏的开发包!
microran2000 2003-10-15
  • 打赏
  • 举报
回复
在你的控件中嵌入MediaPlayer或者RealPlayer控件。添加对二者的引用即可。如果你想从解压到支持网络协议,I don't think it is a piece of cake!

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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