[prev in list] [next in list] [prev in thread] [next in thread] 

List:       helix-server-cvs
Subject:    [Server-cvs] admin/web/build/server config_drm_buydrm.html,1.1,1.2
From:       yijil () helixcommunity ! org
Date:       2013-01-29 5:35:20
[Download RAW message or body]

Update of /cvsroot/server/admin/web/build/server
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv428/server

Added Files:
	config_drm_buydrm.html 
Log Message:
Committed to: HEAD, SERVER_15_0_RN

Reviewed by: Xiaocheng, Richard, James

Synopsis
========
BuyDRM HLS integration

Branches: HEAD, SERVER_15_0_RN

Reviewer: Anyone

Description
===========
I. Intro
===================================================
BuyDrm is an important DRM vendor in the world. With the so called KeyOS Device DRM \
solution, it could protect stream media content over smooth stream, windows media, \
HLS to IOS and android devices. Customers could use it with their VOD and OTT \
services.

For the feature, the Helix Universal Server fetch key from BuyDRM key server. The \
server uses the key to encrypt content stream and updates the m3u8 file with the key \
at the same time, send the content stream to client by using HLS. 

II. What feature will be implemented in Helix Server \
=================================================== 1. Could set the BuyDRM Key \
Server URL 2. Could connect to the BuyDRM Key Server and Fetch key.
3. Could map each stream with content ID and key ID, can support get/getall/del \
content ID and Key ID. 4. Could protect the stream with its random generated key when \
BuyDRM Key Server down 5. can support single-rate/multi-rate stream, can support hpl. \
5. Add a new web group "DRM" for all drm page, move admin page for Verimatrix to the \
group.

A new web page is created for BuyDRM HLS DRM, The cfg example lists below, <List \
Name="BuyDrm_DRM">  <Var EnableRandomKeyWhenFail="0"/>
	<Var KeyServerAddr="http://api.licensekeyserver.com/pck/"/>
	<Var UserKey="816c06ed-407b-abcd-0d4e-7dc123456783"/>
	<Var HttpPassword="abca"/>
    <Var KeyServerRequestTimeout="5"/>
</List>
6. refract code for verimatrix
7. update admin page for verimatrix, when modify HTTP API Password, make it needn`t \
restart.  
III. Solution Description
===================================================
1. In CStreamHandler, add codes to trigger buydrm scrambler and handle the response \
from buydrm.

2. CBuyDrmHandler and CBuyDrmScrambler implements key fetch process, 

3. Add class EnhancedHTTPParser which extends from HTTPParser to parse http message \
whose content length is non-zero, and fetch content from http message.

4. In CTSArchiver, updates code to use key from buydrm to encrypt content

5. In CPlaylistGenerator, add new code to support tag " #EXT-X-INI-PRHDR "

6. in m3ugen plugin, add codes to create m3u8 for hpl request

7. add BuyDrmHttpApiHandler to support API method for buydrm

8. modify codes which used by VCAS before to support multiple type of DRM

9. change HELIX_FEATURE_SERVER_DRM_VCAS to HELIX_FEATURE_SERVER_DRM

IV. New files
server_rn/common/util/buydrmscrambler.cpp
server_rn/common/util/pub/buydrmscrambler.h
server_rn/common/util/drmutil.cpp
server_rn/common/util/pub/drmutil.cpp

server_rn/datatype/mpeg2ts/drmhandler.cpp
server_rn/datatype/mpeg2ts/pub/drmhandler.h

server/admin/web/build/server/config_drm_buydrm.html
server/admin/web/build/mserver/config_drm_buydrm.html
server/admin/web/src/srvprxy/config_drm_buydrm.html.wasm

VI. Files Affected
==============
common/include/defslice.h
common/include/hxdrmscrambler.h
common/include/hxiids.h

datatype_rn/mpeg2/ts/filewriter/ctsarchiver.cpp
datatype_rn/mpeg2/ts/filewriter/pub/ctsarchiver.h
datatype_rn/mpeg2/ts/filewriter/pub/playlistgen.h

protocol/http/httppars.cpp
protocol/http/pub/httppars.h

server-restricted/installer/server/retailservinst.cpp

build/umakepf/helix-server-all-defines.pf

server/protocol/http/http_demux.cpp

server_rn/common/util/Umakefil
server_rn/common/util/drmpathmap.cpp
server_rn/common/util/m3uutil.cpp
server_rn/common/util/pub/drmpathmap.h
server_rn/common/util/pub/m3uutil.h
server_rn/common/util/pub/mpeg2ts_config_names.h
server_rn/common/util/pub/vcasscrambler.h

server_rn/appext/m3ugen/iphoneplaylistparser.cpp
server_rn/appext/m3ugen/m3ugenfsys.cpp
server_rn/appext/m3ugen/readm3u8.cpp
server_rn/datatype/mpeg2ts/Umakefil
server_rn/datatype/mpeg2ts/mpeg2tsplin.cpp
server_rn/datatype/mpeg2ts/streamhandler.cpp
server_rn/datatype/mpeg2ts/pub/streamhandler.h

server-restricted/protocol/http-ctrl/drmhttpapi_handler.cpp
server-restricted/protocol/http-ctrl/pub/drmhttpapi_handler.h

server/engine/core/Umakefil
server/engine/core/core_proc.cpp
server/engine/core/proc_container.cpp
server/engine/core/server_context.cpp
server/engine/core/pub/proc_container.h

server/admin/web/server.opt
server/admin/web/build/mproxy/config_pending.nc.html
server/admin/web/build/mserver/browse_content.html
server/admin/web/build/mserver/config_bookmarking.html
server/admin/web/build/mserver/config_broad_hls.html
server/admin/web/build/mserver/config_broad_mpeg2ts_ingress.html
server/admin/web/build/mserver/config_broad_push2cdn.html
server/admin/web/build/mserver/config_broad_rtmp_ingress.html
server/admin/web/build/mserver/config_broad_rtmp_send.html
server/admin/web/build/mserver/config_drm.html
server/admin/web/build/mserver/config_mpeg2ts.html
server/admin/web/build/mserver/config_multiplexer.html
server/admin/web/build/mserver/config_pending.nc.html
server/admin/web/build/mserver/toc.js
server/admin/web/build/proxy/config_pending.nc.html
server/admin/web/build/server/browse_content.html
server/admin/web/build/server/config_bookmarking.html
server/admin/web/build/server/config_broad_hls.html
server/admin/web/build/server/config_broad_mpeg2ts_ingress.html
server/admin/web/build/server/config_broad_push2cdn.html
server/admin/web/build/server/config_broad_rtmp_ingress.html
server/admin/web/build/server/config_broad_rtmp_send.html
server/admin/web/build/server/config_drm.html
server/admin/web/build/server/config_mpeg2ts.html
server/admin/web/build/server/config_multiplexer.html
server/admin/web/build/server/config_pending.nc.html
server/admin/web/build/server/toc.js
server/admin/web/src/srvprxy/config_drm.html.wasm
server/admin/web/src/srvprxy/config_mpeg2ts.html.wasm
server/admin/web/src/srvprxy/pageData.pm
server/admin/web/src/srvprxy/toc~server.js.wasm

Testing Performed
=================
   Test KeyOs on iPhone/iPad
   
   



--- NEW FILE: config_drm_buydrm.html ---

<HTML>
<HEAD>

<META http-equiv="Content-Type" content="text/html; charset=utf-8"> 
         <TITLE>Buy DRM</TITLE>

<SCRIPT SRC="xblib.js"></SCRIPT>
<SCRIPT SRC="string.js"></SCRIPT>
<SCRIPT SRC="client.js"></SCRIPT>
<SCRIPT SRC="results.js"></SCRIPT>
<SCRIPT SRC="help.js"></SCRIPT>
<SCRIPT SRC="Docs/home.js"></SCRIPT>
<SCRIPT>
if ( isX11 )
{
   document.write( '<LINK REL=stylesheet HREF="main_nav4_x.css" TYPE="text/css">' );
}
else if ( isIE && isMac )
{
   document.write( '<LINK REL=stylesheet HREF="main_ie_mac.css" TYPE="text/css">' );
}
else if ( isNav4 && isMac )
{
   document.write( '<LINK REL=stylesheet HREF="main_nav4_mac.css" TYPE="text/css">' \
); }
else
{
   document.write( '<LINK REL=stylesheet HREF="main.css" TYPE="text/css">' );
}
var contextID = "53";
</SCRIPT>

<SCRIPT SRC="propview.js"></SCRIPT>
<SCRIPT SRC="propview_nolist.js"></SCRIPT>

<SCRIPT SRC="servvar.get.html?buydrm=config.BuyDrm_DRM"></SCRIPT>

<SCRIPT LANGUAGE="javascript">
var propSet =
[
	new PropObj( 'KeyServerAddr', 	   null,       true, true, null, null, null, "BuyDRM \
Server Address" ),  new PropObj( 'UserKey', 	   null,        false,true, null, null, \
null, "User Key" ),   new PropObj( 'KeyServerRequestTimeout', "3", false, false, \
null, null, "int", "Key Request Timeout"),    new PropObj( 'HttpPassword',  "", \
false, false, null, null, "", "HTTP API Password" ),   new PropObj( \
'EnableRandomKeyWhenFail', "1", false, false,  null, null, "int", "Enable Random Key" \
) ];

function BuyDRMView ()
{
	this.base = PropListView ;
	this.base( "Buy DRM", propList, "config.BuyDrm_DRM.", 
    			"servvar", "theForm" );
}

BuyDRMView.prototype = new PropListView ;

var propList = new PropList( "Buy DRM", buydrm, propSet, null );
var propView = new BuyDRMView();
var theForm ;

BuyDRMView.prototype.postValidateSubList = function ()
{
	return validatePassword( "HttpPassword", false );
}

BuyDRMView.prototype.postOnLoad = function ()
{
	// no return value needed
    setCtrlValue( theForm.HttpPassword2, getCtrlValue(theForm.HttpPassword), true );
}

BuyDRMView.prototype.postValidate = function ()
{
    if( getCtrlValue( theForm.HttpPassword ) != getCtrlValue( theForm.HttpPassword2 ) \
)  {
		return rejectInput( theForm.HttpPassword, "Passwords do not match" );
    }
	return true;
}

function onLoad ()
{
	theForm = document.theForm;
	propView.onLoad( window );

}	// onLoad ()
</SCRIPT>

</HEAD>

<BODY 
   CLASS="CONFIG" 
   onLoad="_configOnLoadDefault( onLoad );"
   onUnLoad="_configOnUnLoadDefault(  );"
> 
<TABLE border="0" cellpadding="0" cellspacing="0" width="100%">
<TR><TD align="left" valign="bottom" width="100%" NOWRAP>
   <P class="headline">DRM</P>
</TD></TR>
<TR>
</TABLE>
<BR>
<TABLE border="0" cellpadding="0" cellspacing="0" width="476">
<tr><TD class="bodyText">
Buy DRM
</td></tr>
</TABLE>
<BR>
<FORM 
   method="POST" 
   action="javascript:propView.doSubmit();" 
   onsubmit="return propView.validate()" 
   onreset="onLoad(); return false;"
   name="theForm"
> 
<table border="0" cellspacing="0" cellpadding="0" width="476" style="width:476;">
<TR><TD bgcolor="#E6E6E6" width="19"><img src="images/spacer.gif"  BORDER="0" \
HEIGHT="17" HSPACE="0" NAME="IMG_DIRTY_TAB" VSPACE="0" WIDTH="19"></TD> <TD \
bgcolor="#E6E6E6" class="TabText" width="243" NOWRAP>Buy DRM</TD> <TD \
bgcolor="#FFFFFF" width="20"><img src="images/diagonal.gif"></TD> <TD \
bgcolor="#FFFFFF" width="194" align="right"><SPAN ID="RESTART_IMG_SPAN" \
STYLE="visibility:hidden;"><A HREF="javascript://" onclick="displayChanges()"><img \
src="images/spacer.gif"  BORDER="0" HEIGHT="16" HSPACE="8" NAME="RESTART_IMG" \
VSPACE="0" WIDTH="102"></A></SPAN><A CLASS="linkText" HREF="javascript://" \
onclick="contextHelp()">HELP</A></TD> </TR>
</TABLE>
<table class="formTable" border="0" cellspacing="0" cellpadding="6" width="476">
	<tr>
	<TD class="input" valign="top" align="RIGHT" width="50%">
			<span class="offsetLabel">BuyDRM Server Address</span>
		</td>
		<TD class="input" valign="top" align="left" width="50%">
			<input CLASS="longInput" MAXLENGTH="255" NAME="KeyServerAddr" SIZE="18" \
TYPE="text" VALUE="">  </td>
	</tr>
	<tr>
	<TD class="input" valign="top" align="RIGHT" width="50%">
			<span class="offsetLabel">User Key</span>
		</td>
		<TD class="input" valign="top" align="left" width="50%">
			<input CLASS="longInput" MAXLENGTH="255" NAME="UserKey" SIZE="18" TYPE="text" \
VALUE="">  </td>
	</tr>
	<tr>
	<TD class="input" valign="top" align="RIGHT" width="50%">
			<span class="offsetLabel">Key Request Timeout</span>
		</td>
		<TD class="input" valign="top" align="left" width="50%">
			<input CLASS="input" MAXLENGTH="5" NAME="KeyServerRequestTimeout" SIZE="5" \
TYPE="text" VALUE="">  </td>
	</tr>
	<tr>
	<TD class="input" valign="top" align="RIGHT" width="50%">
			<span class="offsetLabel">HTTP API Password</span>
		</td>
		<TD class="input" valign="top" align="left" width="50%">
			<input CLASS="longInput" MAXLENGTH="14" NAME="HttpPassword" SIZE="18" \
TYPE="password" VALUE="">  </td>
	</tr>
	<tr>
	<TD class="input" valign="top" align="RIGHT" width="50%">
			<span class="offsetLabel">Confirm HTTP API Password</span>
		</td>
		<TD class="input" valign="top" align="left" width="50%">
			<input CLASS="longInput" MAXLENGTH="14" NAME="HttpPassword2" SIZE="18" \
TYPE="password" VALUE="">  </td>
	</tr>
	<tr>
	<TD class="input" valign="top" align="RIGHT" width="50%">
			<span class="offsetLabel">Enable Random Key</span>
		</td>
		<TD class="input" valign="top" align="left" width="50%">
			<select CLASS="input" NAME="EnableRandomKeyWhenFail" SIZE="1" WIDTH="226">
	            <OPTION value="1">Yes</OPTION>
	            <OPTION value="0">No</OPTION>
	        </SELECT>
		</td>
	</tr>
<SCRIPT>
if ( ! isNav4 )
{
	document.write( '</TABLE><table class="formTable" border="0" cellspacing="0" \
cellpadding="6" width="476">' ); }
else
{
	document.write( "<TR </TR>" );
}
</SCRIPT>
<TR>
   <TD colspan="2" bgcolor="#E6E6E6" valign="middle" align="right">
      <img src="images/spacer.gif"  BORDER="0" HEIGHT="17" HSPACE="0" \
NAME="IMG_DIRTY_APPLY" VSPACE="0" WIDTH="19"><input type="image" \
src="images/apply.gif" alt="Apply changes made to this page" name="Apply changes made \
to this page" value="Apply" border="0">&nbsp;<A HREF="javascript://" \
onclick="window.onLoad();"><img src="images/reset.gif"  ALT="Cancel un-applied \
changes" BORDER="0" HSPACE="0" VSPACE="0"></A>  </TD>
</TR>
</TABLE>
</FORM>

<DIV ID="DIV_DYNFORM" style="position:absolute;visibility:hidden"></DIV>
</BODY>
</HTML>



_______________________________________________
Server-cvs mailing list
Server-cvs@helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/server-cvs


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic