研究中国电信的IPTV标准是为了“仿造”一个符合此标准的最小化前端系统,这样就可以利用符合中国电信IPTV标准的廉价盒子打造低成本的IPTV方案了。
以下是整个过程的抓包信息: STB -> Server 认证请求
GET /auth?UserID=99993003&Action=Login HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; ztebw V1.0) Host: 192.168.0.172:8080 Accept: ** Accept-Encoding: identity Referer: http://192.168.0.172:8080/auth?UserID=99993003&Action=Login Cookie: JSESSIONID=GtqFMKRN1V24Q9njJLfjy3C1 QhDvlpJSL
Content-Type: application/x-www-form-urlencoded Content-Length: 280 UserID=11&Authenticator=8301043A66F165BF84D8DEAA D72739A6
3C576CBC9E2128E1EA00F
87B3DCA8DE
85131216BE6543E9EF37BF1
Server -> STB 认证通过,设置频道信息和业务信息: HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Content-Length: 3178 Date: Wed, 17 Nov 2010 03:25:02 GMT Server: CherryPy/3.1.2 WSGI Server <html> <head> <title>auth</title> <script language="javascript"> var channels=new Array(); channels[0]='ChannelID="000000020000000500000000 ,ChannelSDP="",ChannelLogoStruct="",ChannelLogoURL="null",PositionX="0"
,PositionY="0",BeginTime="0",Interval="0",Lasting="0",ChannelType="1"
,ChannelPurchased="1"';
channels[1]='ChannelID="000000020000000500000000 ,PositionX="0",PositionY="0",BeginTime="0",Interval="0",Lasting="0",ChannelType="1"
,ChannelPurchased="1"';
var serviceEntrys= new Array(); serviceEntrys[0] = URL="http://192.168.0.172:8080/iptvepg/serviceEntry.jsp?Action=1" ,HotKey="275",Desc=""
var EPGDomain="http://192.168.0.172:8080/iptvepg"; var UserToken = "99993003***b6aee9575084652610ed5"; var UserID = "99993003"; var UserGroup = "10001"; var EpgGroupNMB = "8"; function setEpgConfig() { Authentication.CTCSetConfig("UserToken", UserToken); document.IptvAuthenticationForm.debug.value = Authentication.CTCGetConfig("UserToken"); Authentication.CTCSetConfig("EpgGroupNMB", EpgGroupNMB); Authentication.CTCSetConfig("TvmsResInterval", "60"); Authentication.CTCSetConfig("TvmsResService" , "http://192.168.0.172:8080/rest_group/zte/result.jsp");
Authentication.CTCSetConfig("TvmsVerifyCode", "8005"); Authentication.CTCSetConfig("EPGDomain", "http://192.168.0.172:8080/iptvepg"); Authentication.CTCSetConfig("NTPDomain", "192.168.0.172"); Authentication.CTCSetConfig("ManagementDomain", "http://192.168.0.172"); document.IptvAuthenticationForm.debug.value = Authentication.CTCGetConfig("ManagementDomain");
Authentication.CTCSetConfig("UpgradeDomain" , "http://192.168.0.172:8080/iptvnm/stb/update.action");
} function ConfigChannel(){ Authentication.CTCSetConfig("ChannelCount",""+channels.length); for(var i=0;i<channels.length;i++){ } } function setServiceEntry(){ for(var i=0;i<serviceEntrys.length;i++){ Authentication.CTCSetConfig("ServiceEntry",serviceEntrys[i]); } } function afterAuthEpg() { setEpgConfig(); ConfigChannel(); setServiceEntry(); var jumpAddr = EPGDomain+"?"; jumpAddr += ("UserToken="+UserToken+"&"); jumpAddr += ("UserID="+UserID+"&"); jumpAddr += ("UserGroupNMB="+UserGroup+"&"); jumpAddr += ("EPGGroupNMB="+EpgGroupNMB); //window.location.href = jumpAddr; var mp = new MediaPlayer(); var playerInstanceID = mp.getNativePlayerInstanceI //mp.setVideoDisplayMode(1); document.IptvAuthenticationForm.debug.value = channels.length; } function EPGDomainVisit(EPGDomainAddr) { window.location.href = EPGDomainAddr; } function UpgradeDomainVisit(UpgradeDomainAddr) { window.location.href = UpgradeDomainAddr; } </script> </head> <body bgcolor="transparent" onload=afterAuthEpg()> <form action="ConfigUserInfoAction.do" name="IptvAuthenticationForm" method="post"> <input value="*" name="debug" size="40"> </form> </body> </html>
接下来直接调用mp.joinChannel(90)就进入了直播,其中mp是初始化的一个播放器,可参照中国电信的标准,90是设置一个直播频道,其实就是采用Rainbow( http://www.doorsolutions.cn/redmine/boards/4/topics/17 )软件编码器推出的组播流。 至于点播就比较容易了,在页面中给出点播连接,直接点进去就可以了。 调试过程中遇到和需要注意的问题:
后续需要做的工作就是熟悉中国电信标准的MediaPlayer对象的编程接口,实现产品化的直播和点播,也就是有必要的遥控器按键响应和OSD显示。 (灯少) |