已经有很久没有写博客了,差不多两个月了吧。前段时间在纠结如何写一个播放器的ActvieX控件,基于RTSP协议来写的,专门用于播放H264的视频。现在已经写完了,使用MFC来写的,因为MFC写起来简单嘛。但是感觉MFC写的话不能很好的控制ActiveX的行为,而且MFC写ActiveX控件的资料是很少的。本来ATL的资料就不是很多,用MFC来写ActiveX控件的资料更少。所以我觉得以后自己写ActiveX控件的话还是用ATL来写吧。一直没有用ATL来写ActiveX控件主要是因为ATL太吓人了,完全不知道在搞什么,但是现在觉得也还好啦,毕竟比起全部都来自己写好多了。后面我将会写一个系列的介绍开发一个基于播放网络视频流的的ActiveX控件。当然还是从基于RTSP播放H264的视频开始(其实播放什么样的格式不是特别重要啦,因为ffmpeg自带码流的推断功能,重要的是解决各种恼人的ActiveX的问题和应用层协议的问题。)所以,这篇文章只是开个题而已啦。
其实开发ActiveX控件也怪苦逼的,开发使用C++开发(为什么不用C#了?不会啊,这是一个原因,二来ffmpeg是C语言写的啊,不用C++用什么啊?)。但是很多时候ActiveX控件要求在网页上使用(话说HTML5都出来了,我们写个毛线的播放视频的ActiveX控件啊?额,这个嘛,ActiveX控件也有取代不了的地方啦,比如ActiveX控件也可以用于应用程序中去,而且ActiveX控件可以很好的学习COM的原理什么的,话说ActiveX肯定还有其他用的地方啦,比如什么安全控件什么的~~~~好吧,怎么略感无力啊)。这时候我们不仅要会C++,还要会一点画网页的技术啦。我就带搞一点点画页面的代码吧。代码如下:
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <script type = "text/javascript"> 5 function doLive() { 6 var video = document.getElementById("video"); 7 var url = document.getElementById("URL").value; 8 var itemID = video.AddURL(url); 9 //var itemID = objTag.AddURL("rtsp://192.168.1.166/mm.264"); 10 video.PlayItem(itemID); 11 } 12 function doStop() { 13 var video = document.getElementById("video"); 14 video.StopPlay(); 15 } 16 17 function doPause() { 18 var video = document.getElementById("video"); 19 video.PausePlay(); 20 } 21 </script> 22 </head> 23 <body> 24 <div id = "container" style = "border: red solid 1px; height: 480px; 640px;"> 25 <object id = "video" classid = "CLSID:12345678........" style = "border: red solid 1px; height: 480px; 640px;"> 26 </object> 27 </div> 28 <div id = "buttonpad" style = "height: 60px; 640px;"> 29 <div id = "buttonpad1" style = "height: 25px; with: 640px;"> 30 <input type = "button" value = " 播 放 " onclick = "doLive()" /> 31 <input type = "button" value = "暂停继续" onclick = "doPause()" /> 32 <input type = "button" value = " 停 止 " onclick = "doStop()" /> 33 URL:<input type = "text" id = "URL" style = "350px;"/> 34 </div> 35 </div> 36 </body> 37 38 </html>其中25行的那个CLSID就是你写的ActiveX控件的CLSID啦。head里面写了一些JavaScript的代码,然后body里面就有一些按钮,当按钮被点击的时候就会调用相应后面的JavaScript函数,然后JavaScript函数里面在调用我们写的ActiveX控件里面的方法或者做一些其他的什么事。然后大概就是这样,反正要想着html网页里面是靠事件来进行驱动的,没有什么各种乱七八糟的main函数或者自己设置一个什么循环什么的。这些东西都是没有的,只有点击各种按钮、显示各种各样的东西。好了就是这样了,这一篇先写到这把。剩下的博文后面再来写。