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

List:       helix-datatype-cvs
Subject:    [Datatype-cvs] mp4/payload h264pyld.cpp,1.23,1.23.28.1
From:       yichen () helixcommunity ! org
Date:       2013-09-05 9:18:25
[Download RAW message or body]

Update of /cvsroot/datatype/mp4/payload
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv11935

Modified Files:
      Tag: SERVER_15_1_0
	h264pyld.cpp 
Log Message:
Synopsis:
=========
CR:[DASH][RTP][High Bit-rate] Push 15Mbps RTP ingress to server, the DASH segments \
can't be segmented

Actual:
1. Mostly, the DASH segments can not be segmented, so the DASH playback can not be \
started, and the log will record: 

WARNING:16-Aug-2013 13:48:41.580 tmplgpln(7563): RTPLive/28: 15.sdp: Live session is \
invalid or has excessive A/V sync drift. Current stream No 0: queue size: 801, queue \
depth: 500. State: BUFFERING 


2. Sometimes, the DASH segments can be segmented, but the quality of DASH playback is \
very bad(not smooth and have a lot of mosaic), the size of m4s file is very \
uniformity( such as 1.m4s is 6000KB, 2.m4s is 12000KB), and this is one of the few \
                cases.
Expected: High bit-rate RTP ingress DASH playback is well.
Code Build Found In: servproxyall-130808-155 and v15.0

The root cause is that, when h264PayloadFormat depacktize the incoming stream, It \
will get codec profile id from "FMTPprofile-level-id", But for RTP, this filed is a \
type of ULONG, but it assume the type of this field is string, which cause server \
send a wrong profile id to player that cause the player fail.

My solution is get the profile ID as ULONG.

Files affected
=====================
datatype/mp4/payload/h264pyld.cpp

Test perform
=================
Ingess a 15M rtp stream to server.

Sample player can play the feed normally

Dash can segment normally and client can play normally

Integration Tests:
None

Leak Tests: None
Performance Tests: N/A

Platforms Tested: win-x86_64-vc10.
Builds Verified: win-x86_64-vc10.

QA Hints
========
None.


Index: h264pyld.cpp
===================================================================
RCS file: /cvsroot/datatype/mp4/payload/h264pyld.cpp,v
retrieving revision 1.23
retrieving revision 1.23.28.1
diff -u -d -r1.23 -r1.23.28.1
--- h264pyld.cpp	3 Nov 2011 16:00:02 -0000	1.23
+++ h264pyld.cpp	5 Sep 2013 09:18:17 -0000	1.23.28.1
@@ -505,6 +505,7 @@
     IHXBuffer* pSpropParameterSets = NULL;
     UINT32 offset = 0;
     CNALUnit *pNALUnit = NULL;
+    UINT32  ulProfileLevelID = 0;
     UINT32 ulConfigBuffSize = AVC_DECODER_CONFIGURATION_RECORD_HEADER_SIZE;
     UCHAR tmp[2];
 
@@ -519,6 +520,18 @@
                             (char*)pProfileLevelIDString->GetBuffer());
 	
     }
+    else
+    { 
+        char buf[64] = {0};
+        retVal = HXR_FAIL;
+        pHeader->GetPropertyULONG32("FMTPprofile-level-id", ulProfileLevelID);
+        if (ulProfileLevelID != 0)
+        {
+            sprintf(buf, "%d", ulProfileLevelID);
+            retVal = HexStringToBinary(profileLevelID, buf);
+        }
+    }
+
     if(retVal != HXR_OK)
     {
         profileLevelID[0] = 0x42;


_______________________________________________
Datatype-cvs mailing list
Datatype-cvs@helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/datatype-cvs


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

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