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

List:       helix-server-cvs
Subject:    [Server-cvs] admin/web/src/srvprxy config_mpeg2ts.html.wasm, 1.17, 1.18
From:       tniu () helixcommunity ! org
Date:       2013-01-29 9:37:32
[Download RAW message or body]

Update of /cvsroot/server/admin/web/src/srvprxy
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv22141

Modified Files:
	config_mpeg2ts.html.wasm 
Log Message:

Committed to : HEAD

Reviewed by: Xiaocheng, James Li and Richard Yuan 

Verification Build:
2013-01-29 daily build

Synopsis
========
IDR integration

Branches: HEAD

Reviewer: Anyone

Description
===========
I. Intro
========
IDR: Instantaneous Decoding Refresh
IDR frame belongs to I frame, the frames after IDR frame, can not quote the content \
of the frames before IDR frame, in the opposite situation, B frames or P frames after \
an I frame can quote the content of the frames before the I frame. So in a random \
access situation, the Helix server will find the segment according the random access \
point first, then the frame will be analysed according other frames of the segment \
where it belongs to To support verimatrix player, helix server make the first frame \
of ts file key frame. Make the PID and SID equal to each ts file if MR.

II. What feature has been implemented in Helix Server 

========================================================
1. Enable/Disable IDR frame feature on admin page, and save to rmserver.cfg.
2. Make the first frame of ts file IDR frame.
3. If MR, make the PID equal to each ts file, and so does SID.
4. Ensure ts duration don't less than the value configured in rmserver.cfg.

III. Solution Description
=========================
1. Add config option on admin page, get option value from rmserver.cfg.
2. Add IDRController struct, after analyze stream, pass this struct from \
CStreamHandler to CTSArchiver. 3. In CTSArchiver, add the API IsKeyFrame() to check \
whether the frame is key frame or not by IDRController and ASMFlag,  add the API \
IsKeyFrameAligned() to check streams are aligned or not when MR, if not aligned, the \
error log will be output to rmerror.log. 4. If IDR frame enabled, set PID by value of \
PROGAM_MAP_PID_START and SID is the sum of ELEMENTARY_PID_START and StreamGroupNumber \
in CMPEG2TSMuxer. 5. If only audio, consider every frame as key frame.
6. If IDR frame enabled, HandleIDRPacketReady() will be called to handle packet in \
CTSArchiver. If this packet is key frame and the total duration of packets in queue \
is longer than value configured in rmserver.cfg, write pakets in queue to ts file. \
Then or else, this packet is put in queue. 7. when user seek, calculate the new \
position using duration of all ts file. then rewrite the m3u8 file. In the previous \
version, the duration of every ts file is equal except last one. so calculate the \
seek position by divided ts number with no remainder. 8.update the value of \
"#EXT-X-TARGETDURATION" in m3u8 file using the average duration of total ts file. 9 \
Not deal with audio only this time, so its segment duration will be same as the \
configuraton value in rmserver.cfg.

IV. File affected
=================
server_rn/datatype/mpeg2ts/streamhandler.cpp
server_rn/datatype/mpeg2ts/pub/streamhandler.h
datatype_rn/mpeg2/ts/filewriter/playlistgen.cpp
datatype_rn/mpeg2/ts/filewriter/ctsarchiver.cpp
datatype_rn/mpeg2/ts/filewriter/pub/playlistgen.h
datatype_rn/mpeg2/ts/filewriter/pub/ctsarchiver.h
datatype_rn/mpeg2/ts/muxer/tsmux.cpp
datatype_rn/mpeg2/ts/muxer/pub/tsmux.h
server_rn/common/util/pub/mpeg2ts_config_names.h
server-restricted/installer/server/retailservinst.cpp
server-restricted/protocol/http/m3u8hdlr.cpp
server/admin/web/src/srvprxy/config_mpeg2ts.html.wasm
server/admin/web/build/server/config_mpeg2ts.html
server/admin/web/build/mserver/config_mpeg2ts.html

VI. New files
==============
server15/common/include/hxidrframe.h

VII. Testing Performed
======================
1. Test platform: Windows7(32-Bit), Radhat(64-Bit).
2. Test on iphone and verimatrix.
3. Test case:
 1) Admin page for LDR frame enabled, and check the rmserver.cfg.
 2) MR vod playback on iphone, and check m3u8 file.
 3) The PID and SID must be the same value, check these on TSreader.
 4) MR vod playback on verimatrix, check m3u8 file.
 5) The first frame of every segments must be IDR frame.

QA Hints
========
Need lots of test to verify MR stream by verimatrix.

Index: config_mpeg2ts.html.wasm
===================================================================
RCS file: /cvsroot/server/admin/web/src/srvprxy/config_mpeg2ts.html.wasm,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- config_mpeg2ts.html.wasm	29 Jan 2013 05:28:09 -0000	1.17
+++ config_mpeg2ts.html.wasm	29 Jan 2013 09:36:08 -0000	1.18
@@ -70,6 +70,7 @@
     new PropObj('MPEG2-TS_Output.AltServer', "", false, false, null, null, \
                "hostname", "AltServer"),
     new PropObj('MPEG2-TS_Output.WriteAbsolutePaths', "0", false, false, null, null, \
                "int", "Write Absolute Paths"),
     new PropObj( 'MPEG2-TS_Output.VCASNode', "", false, false, null, null, \
"ShortName", "Verimatrix DRM Resouce Node" ),  +    new \
PropObj('MPEG2-TS_Output.IDRFrameEnabled', "0", false, false, null, null, "int", "IDR \
Frame Enabled"),  ];
 
 propListParams = new PropList( "Content Mount Points", fsLocal, null, propSetParams \
); @@ -501,6 +502,9 @@
         <BR>
         <@= formElemSelectYesNo( "Use Absolute Paths for Segments", name => \
"MPEG2-TS_Output.WriteAbsolutePaths", class => "input", maxlength=>16 ); @>  <BR>
+        <BR>
+        <@= formElemSelectYesNo( "IDR Frame Enabled", name => \
"MPEG2-TS_Output.IDRFrameEnabled", class => "input", maxlength=>16 ); @> +        \
<BR>  </TD>
 </TR>
 


_______________________________________________
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