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

List:       helix-server-cvs
Subject:    [Server-cvs] engine/dataflow ppm.cpp, 1.39.2.22.12.25,
From:       rdolas () helixcommunity ! org
Date:       2007-11-27 11:56:35
Message-ID: 200711271156.lARBukJD028328 () mailer ! progressive-comp ! com
[Download RAW message or body]

Update of /cvsroot/server/engine/dataflow
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv30720

Modified Files:
      Tag: SERVER_11_1
	ppm.cpp 
Log Message:
Synopsis
========
 
This CR includes fix for PR 204575: Back-Channel Multicasting is performing poorly.
 
Quick link to the PR:
https://bugs.dev.prognet.com/show_bug.cgi?id=204575
 
Branch: SERVER_11_1_RN, HEAD, SERVER_12, BORABORA
Suggested Reviewer: Darrick, Chytanya
 
Description
===========

Using Back-Channel Multicasting with Helix Server version 11.1.5 results with poor video 
and audio quality with multiple audiences and the stream frequently hangs in the delivery
with very few clients actually attaching to the server. This happens when the streams from 
the encoder includes two audiences i.e. (34kand 80k). or for multiple audiences only. 

After complete analysis I found that the problem was with the PPM delivery when using the 
back-channel multicasting with multiple audiences. Inside the PPM when we get the 
PacketBufferQueue in method ProcessLivePacket() and if the RSD is enabled then we have 
m_bIsWireline as FALSE (as the SessionStats is NULL for the multicast PPM) and 
m_bIsMobileCBR as FALSE (as one of the stream is of type STRM_TSD) then we are using the 
MobileLiveTSDPacketReady() method for serving the media. But since it is a multicast session, 
we attempt to send packets from all the audiences out. But the delivery is not smooth as the 
number of tokens that are used is only based on the single bit rate. As a result we are never 
able to complete the RSD queue as the tokens are getting empty very frequently and there is a 
delay in sending the packets out.
 
We tried for the following options:
 
1) Problem with Tokens used for delivering the data:

We can smooth the playback somewhat by updating the tokens to some higher value i.e with 
the total bit rate from the 2-audiences (or for multiple audiences) and the playback was 
smooth for sometime but after some long duration the playback was getting stuck at some 
points in between.
 
2) Enabling multicast flag inside the MulticastSessionSetup() method:
So we tried to enable m_bMulticast Flags which was getting set to false for the 
MulticastSessions PPM::Session. So I tried with passing TRUE for multicast flag from 
MulticastSessionSetup() method but then the functionality was not working and player was 
giving the error message: Not able to receive the audio data try with TCP delivery.
This was due to the statements inside Session::Play(bool) where we are returning when the
m_bIsMulticast Flag is set:
 
      if (m_bIsMulticast)
          return;
 
3) Now I am getting the delivery type from the Stream data and then for the multicast
Delivery disabling the RSD and this seems to be the better options for fixing this issue.
 
 
FIX
===
 
For fixing this issue I am now disabling the RSD for the multicast delivery by setting 
m_bPktBufQProcessed to TRUE and then returning from there by calling the method 
LiveSessionPacketReady(), as there doesnt seem to be a value in having RSD for 
Multicast delivery as we clients can connect randomly to a multicast session. 
 

   Files Affected
   ==============
   server/engine/dataflow/ppm.cpp
 

Testing Performed
=================
 
Unit Tests: 
- Tested that the back-channel multicast with multiple audiences are performing
  Good and there is no issue of poor quality.
 

Integration Tests: 
- None


Leak Tests:
- None

 
Performance Tests:
- None
 

Build verified: win32-i386-vc7, linux-rhel4-i686, sunos-5.9-sparc-server 

Platforms Tested: win32-i386-vc7
 

QA Hints
========

Please verify that the back-channel multicast with multiple audiences is performing
proplery and there is no issue with audio or video quality.




Index: ppm.cpp
===================================================================
RCS file: /cvsroot/server/engine/dataflow/ppm.cpp,v
retrieving revision 1.39.2.22.12.25
retrieving revision 1.39.2.22.12.26
diff -u -d -r1.39.2.22.12.25 -r1.39.2.22.12.26
--- ppm.cpp	19 Sep 2007 06:11:13 -0000	1.39.2.22.12.25
+++ ppm.cpp	27 Nov 2007 11:56:31 -0000	1.39.2.22.12.26
@@ -3344,6 +3344,17 @@
             return LiveSessionPacketReady(ulStatus, pPacket);
         }
 
+        /* As Part of fix for "PR 204575: poor quyality for back channel multicast"
+         * we are disabling the RSD for the multicast delivery.
+         */
+        PPMStreamData* pSD = m_pStreamData + m_unKeyframeStream;
+        if (pSD->m_pTransport->isRTSPMulticast())
+        {
+            HX_RELEASE(pQueue);
+            m_bPktBufQProcessed = TRUE;
+            return LiveSessionPacketReady(ulStatus, pPacket);
+        }
+
         if(HXR_OK != m_pProc->pc->registry->SetInt(
             SERVER_LIVERSD_CPUTHRESHOLD_REACHED, 0, m_pProc))
         {


_______________________________________________
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