一种用于网络播放的ActiveX控件

    已经有很久没有写博客了,差不多两个月了吧。前段时间在纠结如何写一个播放器的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函数或者自己设置一个什么循环什么的。这些东西都是没有的,只有点击各种按钮、显示各种各样的东西。好了就是这样了,这一篇先写到这把。剩下的博文后面再来写。

原文地址:https://www.cnblogs.com/DennisXie/p/4130987.html