[prev in list] [next in list] [prev in thread] [next in thread]
List: helix-datatype-cvs
Subject: [Datatype-cvs] rtsp/fileformat rtspfformat.cpp, 1.6, 1.6.40.1 rtspffpacketqueue.cpp, 1.5, 1.5.230.1
From: yijil () helixcommunity ! org
Date: 2013-11-14 9:51:27
[Download RAW message or body]
Update of /cvsroot/datatype/rtsp/fileformat
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv16097
Modified Files:
Tag: SERVER_15_1_0
rtspfformat.cpp rtspffpacketqueue.cpp rtspfformat.ver
Log Message:
Committed to: HEAD, SERVER_15_1_0_RN
Reviewed by: Richard
Synopsis:
=========
RTSP Ingest Feature
Branch: HEAD, SERVER_15_1_0_RN
Suggested Reviewers: anyone
Description:
============
I. Intro
==========================================
Some cameras or Multimedia server can support RTSP request. HUS need support RTSP \
protocol as a client to fetch streams. Then treat these streams as simple live \
stream.
RTSP ingest simply opens a RTSP session with camera or Multimedia server, then create \
data connection with then, and fetch media data. When initialize RTSP session, it \
need support none/basic/digest authentication mode according to camera or Multimedia \
server.
Now it can only support single rate.
II. What feature have been implemented in the version
1. Implement basic/digest authentication
2. Add new admin page and license support
3. Add statistics information for RTSP ingest live stream
4. the configuration information
<List Name="FSMount">
<!-- RTSP ingest live -->
<List Name="RTSP Ingest Live">
<Var ShortName="pn-rtspingest"/>
<Var MountPoint="/rtspingest/"/>
</List>
</List>
<List Name="RTSP_Ingest">
<Var GlobalEnable="1"/>
<Var InitialTimeout="10"/>
<Var SourceScanInterval="60"/>
<Var StreamTimeout="5"/>
<Var DebugLevel="0"/>
<List Name="Source1">
<Var StreamURL="rtsp://IPAddress:Port/[streamname]"/>
<Var UserName=username/>
<Var Password=password/>
<Var Enable="1"/>
<Var StreamName="test.mp4"/>
</List>
</List>
IV.
Files affected:
===============
build/BIF/helixinternal.bif
build/BIF/SERVER_15_1_0-internal.bif
build/umakepf/helix-server-all-defines.pf
server/admin/web/server.opt
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_send.html
server/admin/web/build/mserver/config_mpeg2ts.html
server/admin/web/build/mserver/config_pending.nc.html
server/admin/web/build/mserver/license.html
server/admin/web/build/mserver/toc.js
server/admin/web/build/server/config_broad_mpeg2ts_ingress.html
server/config_broad_push2cdn.html
server/config_broad_rtmp_send.html
server/admin/web/build/server/config_mpeg2ts.html
server/admin/web/build/server/config_pending.nc.html
server/admin/web/build/server/license.html
server/admin/web/src/srvprxy/license.html.wasm
server/admin/web/src/srvprxy/pageData.pm
server/admin/web/src/srvprxy/toc~server.js.wasm
client/auth/basicauth/clbascauth.cpp
client/audiosvc/hxaudply.cpp
client/audiosvc/hxaudses.cpp
server-restricted/installer/server/make_tempdir
server-restricted/installer/server/retailservinst.cpp
server/engine/context/hxclfact.cpp
server/engine/core/_main.cpp
server/engine/core/server_info.cpp
server/engine/core/pub/server_info.h
server/common/util/make_lib
server/common/util/pub/bcast_defs.h
common/auth/rn5auth/Umakefil
common/auth/rn5auth/digestauth.cpp
common/auth/rn5auth/digestauth.h
common/auth/rn5auth/rn5auth.cpp
protocol/rtsp/Umakefil
protocol/rtsp/dlliids.cpp
protocol/rtsp/rtspclnt.cpp
common/include/defslice.h
client/core/Umakefil
client/core/hxcleng.cpp
client/core/hxconnbwinfo.cpp
client/core/hxntsrc.cpp
client/core/hxsrc.cpp
client/core/hxplay.cpp
client/core/latency_mode_hlpr.cpp
client/core/perscmgr.h
client/core/recordctl.cpp
client/core/rtspprotocol.cpp
client/core/rtspprotocol.h
client/core/sinkctl.cpp
client/core/srcinfo.cpp
client/core/velproxy.cpp
client/core/pub/chxeven.h
client/core/pub/hxplay.h
common/include/hxwin.h
datatype/smil/renderer/smil2/smldoc.cpp
datatype/smil/renderer/smil2/pub/smldoc.h
protocol-restricted/pna/Umakefil
VII. New Files added:
=================
client/core/svrclntcorelib_unix.pcf
client/core/svrclntcorelib
datatype/rtsp/fileformat/pub/rtspffclocksource.h
datatype/rtsp/fileformat/pub/rtspfformat.h
datatype/rtsp/fileformat/pub/rtspffpacketqueue.h
datatype/rtsp/fileformat/rtspffclocksource.cpp
datatype/rtsp/fileformat/rtspfformat.cpp
datatype/rtsp/fileformat/rtspffpacketqueue.cpp
datatype/rtsp/fileformat/rtspfformatdll.cpp
datatype/rtsp/fileformat/Umakefil
datatype/rtsp/fileformat/win32.pcf
server_rn/broadcast/transport/rtsp/recv/pub/clientcontext.h
server_rn/broadcast/transport/rtsp/recv/pub/rtspingest_config.h
server_rn/broadcast/transport/rtsp/recv/pub/rtspingestfileowner.h
server_rn/broadcast/transport/rtsp/recv/pub/rtspingesthandler.h
server_rn/broadcast/transport/rtsp/recv/pub/rtspingestmap.h
server_rn/broadcast/transport/rtsp/recv/pub/rtspingestpln.h
server_rn/broadcast/transport/rtsp/recv/pub/rtspingestworkercb.h
server_rn/broadcast/transport/rtsp/recv/clientcontext.cpp
server_rn/broadcast/transport/rtsp/recv/rtspingest_config.cpp
server_rn/broadcast/transport/rtsp/recv/rtspingestfileowner.cpp
server_rn/broadcast/transport/rtsp/recv/rtspingesthandler.cpp
server_rn/broadcast/transport/rtsp/recv/rtspingestmap.cpp
server_rn/broadcast/transport/rtsp/recv/rtspingestpln.cpp
server_rn/broadcast/transport/rtsp/recv/rtspingestworkercb.cpp
server_rn/broadcast/transport/rtsp/recv/win32.pcf
server_rn/broadcast/transport/rtsp/recv/guids.cpp
server_rn/broadcast/transport/rtsp/recv/Umakefil
server/admin/web/src/srvprxy/config_broadcast_rtsp_ingest.html.wasm
server/admin/web/build/server/config_broadcast _rtsp_ingest.html \
server/admin/web/build/mserver/config_broadcast _rtsp_ingest.html
Testing Performed:
================
Unit Tests:
None
Integration Tests:
1. Add configuration like given upstairs
2. Set camera using none/basic/digest authentication mode
3. using VLS/RealPlayer to play the stream from "/rtspingest/" mountpoint
4. Enable segmentation for "/rtspingest/", using IPad to play the stream
Leak Tests: None
Performance Tests: N/A
Platforms Tested: Windows
Builds Verified: Windows
QA Hints
========
None.
Index: rtspfformat.ver
===================================================================
RCS file: /cvsroot/datatype/rtsp/fileformat/rtspfformat.ver,v
retrieving revision 1.3924
retrieving revision 1.3924.4.1
diff -u -d -r1.3924 -r1.3924.4.1
--- rtspfformat.ver 30 May 2013 10:43:27 -0000 1.3924
+++ rtspfformat.ver 14 Nov 2013 09:51:24 -0000 1.3924.4.1
@@ -2,16 +2,16 @@
* Copyright (C) 1997-2002 RealNetworks Corporation. All rights reserved.
*/
#ifdef _MACINTOSH
-#define TARVER_ULONG32_VERSION ((10 << 28) | (0 << 20) | (0 << 12) | 3924)
-#define TARVER_ULONG64_VERSION ((10 << 48) | (0 << 32) | (0 << 16) | 3924)
+#define TARVER_ULONG32_VERSION ((15 << 28) | (1 << 20) | (0 << 12) | 0)
+#define TARVER_ULONG64_VERSION ((15 << 48) | (1 << 32) | (0 << 16) | 0)
#else
-#define TARVER_ULONG32_VERSION (UINT32)(((UINT32)10 << 28) | ((UINT32)0 << 20) | \
((UINT32)0 << 12) | 3924)
-#define TARVER_ULONG64_VERSION (UINT64)(((UINT64)10 << 48) | ((UINT64)0 << 32) | \
((UINT64)0 << 16) | 3924) +#define TARVER_ULONG32_VERSION (UINT32)(((UINT32)15 << 28) \
| ((UINT32)1 << 20) | ((UINT32)0 << 12) | 0) +#define TARVER_ULONG64_VERSION \
(UINT64)(((UINT64)15 << 48) | ((UINT64)1 << 32) | ((UINT64)0 << 16) | 0) #endif
-#define TARVER_LIST_VERSION 10,0,0,3924
-#define TARVER_MAJOR_VERSION 10
-#define TARVER_MINOR_VERSION 0
+#define TARVER_LIST_VERSION 15,1,0,0
+#define TARVER_MAJOR_VERSION 15
+#define TARVER_MINOR_VERSION 1
#define TARVER_RELEASE_VERSION 0
-#define TARVER_BUILD_VERSION 3924
-#define TARVER_STRING_VERSION "10.0.0.3924"
+#define TARVER_BUILD_VERSION 0
+#define TARVER_STRING_VERSION "15.1.0.0"
#define TARVER_STR_BUILD_NAME ""
Index: rtspffpacketqueue.cpp
===================================================================
RCS file: /cvsroot/datatype/rtsp/fileformat/rtspffpacketqueue.cpp,v
retrieving revision 1.5
retrieving revision 1.5.230.1
diff -u -d -r1.5 -r1.5.230.1
--- rtspffpacketqueue.cpp 6 Jul 2007 22:01:36 -0000 1.5
+++ rtspffpacketqueue.cpp 14 Nov 2013 09:51:24 -0000 1.5.230.1
@@ -59,6 +59,7 @@
#include "rtspffpacketqueue.h"
#include "hxtlogutil.h"
#include "pckunpck.h"
+#include "hxthread.h"
#include "hxtlogutil.h"
@@ -148,11 +149,12 @@
m_pMutex = pMutex;
HX_ADDREF(m_pMutex);
-
- if (!m_pMutex)
- {
- retVal = CreateInstanceCCF(CLSID_IHXMutex, (void**) &m_pMutex, m_pContext);
- }
+#ifndef HELIX_FEATURE_SERVER
+ if (!m_pMutex)
+ {
+ retVal = CreateInstanceCCF(CLSID_IHXMutex, (void**) &m_pMutex, \
m_pContext); + }
+#endif
}
return retVal;
@@ -164,7 +166,7 @@
IHXFormatResponse* pFFResponse = NULL;
IHXValues* pFileHeader = NULL;
- m_pMutex->Lock();
+ HX_LOCK(m_pMutex);
if (m_FileHeader.IsSet() && m_pFFResponse)
{
@@ -174,7 +176,7 @@
retVal = m_FileHeader.Get(pFileHeader);
}
- m_pMutex->Unlock();
+ HX_UNLOCK(m_pMutex);
if (SUCCEEDED(retVal))
{
@@ -196,30 +198,30 @@
IHXFormatResponse* pFFResponse = NULL;
IHXValues* pStreamHeader = NULL;
- m_pMutex->Lock();
+ HX_LOCK(m_pMutex);
if (m_pStreams &&
- (uStreamNumber < m_uNumStreamHeaders) &&
- m_pFFResponse)
+ (uStreamNumber < m_uNumStreamHeaders) &&
+ m_pFFResponse)
{
- if (m_pStreams[uStreamNumber].m_Header.IsSet())
- {
- pFFResponse = m_pFFResponse;
- pFFResponse->AddRef();
+ if (m_pStreams[uStreamNumber].m_Header.IsSet())
+ {
+ pFFResponse = m_pFFResponse;
+ pFFResponse->AddRef();
- retVal = m_pStreams[uStreamNumber].m_Header.Get(pStreamHeader);
- }
+ retVal = m_pStreams[uStreamNumber].m_Header.Get(pStreamHeader);
+ }
}
- m_pMutex->Unlock();
+ HX_UNLOCK(m_pMutex);
if (SUCCEEDED(retVal))
{
- HXLOGL1(HXLOG_RTSF, "CRTSPFFPacketQueue::StreamHeaderReady(status=%ld, Strm=%hd)",
- retVal,
- uStreamNumber);
+ HXLOGL1(HXLOG_RTSF, "CRTSPFFPacketQueue::StreamHeaderReady(status=%ld, \
Strm=%hd)", + retVal,
+ uStreamNumber);
- retVal = pFFResponse->StreamHeaderReady(retVal, pStreamHeader);
+ retVal = pFFResponse->StreamHeaderReady(retVal, pStreamHeader);
}
HX_RELEASE(pStreamHeader);
@@ -231,79 +233,78 @@
HX_RESULT CRTSPFFPacketQueue::DispatchPacket(UINT16 uStreamNumber)
{
HX_RESULT retVal = HXR_UNEXPECTED;
-
if (m_pStreams &&
- (uStreamNumber < m_uNumStreamHeaders) &&
- (!m_pStreams[uStreamNumber].IsStreamDone()))
+ (uStreamNumber < m_uNumStreamHeaders) &&
+ (!m_pStreams[uStreamNumber].IsStreamDone()))
{
- UINT32 ulPacketSize = 0;
- IHXPacket* pPacket = NULL;
+ UINT32 ulPacketSize = 0;
+ IHXPacket* pPacket = NULL;
- retVal = HXR_NO_DATA;
+ retVal = HXR_NO_DATA;
- m_pMutex->Lock();
+ HX_LOCK(m_pMutex);
- ulPacketSize = m_pStreams[uStreamNumber].GetPacket(pPacket);
+ ulPacketSize = m_pStreams[uStreamNumber].GetPacket(pPacket);
- if (pPacket)
- {
- retVal = HXR_OK;
+ if (pPacket)
+ {
+ retVal = HXR_OK;
- HX_ASSERT(m_ulPacketBytesQueued >= ulPacketSize);
+ HX_ASSERT(m_ulPacketBytesQueued >= ulPacketSize);
- if (m_ulPacketBytesQueued >= ulPacketSize)
- {
- m_ulPacketBytesQueued -= ulPacketSize;
- }
+ if (m_ulPacketBytesQueued >= ulPacketSize)
+ {
+ m_ulPacketBytesQueued -= ulPacketSize;
+ }
- m_uNextPacketStreamNumber = INV_STREAM_NUM; // We need to re-eval next packet \
stream number + m_uNextPacketStreamNumber = INV_STREAM_NUM; // We need to \
re-eval next packet stream number
- if ((m_eStatus == RTSPFFPacketQueue_Full) &&
- (m_ulPacketBytesQueued <= RTSPFF_FULL_TO_NORMAL_QUEUE_BYTES))
- {
- m_eStatus = RTSPFFPacketQueue_Normal;
+ if ((m_eStatus == RTSPFFPacketQueue_Full) &&
+ (m_ulPacketBytesQueued <= RTSPFF_FULL_TO_NORMAL_QUEUE_BYTES))
+ {
+ m_eStatus = RTSPFFPacketQueue_Normal;
- m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus,
- RTSPFFPacketQueue_Full,
- uStreamNumber);
- }
+ m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus,
+ RTSPFFPacketQueue_Full,
+ uStreamNumber);
+ }
- m_pMutex->Unlock();
+ HX_UNLOCK(m_pMutex);
- if (m_pFFResponse)
- {
- HXLOGL4(HXLOG_RTSF, "CRTSPFFPacketQueue::PacketReady(Strm=%hu Time=%lu) \
BytesQueued=%ld",
- uStreamNumber,
- pPacket->GetTime(),
- m_ulPacketBytesQueued);
+ if (m_pFFResponse)
+ {
+ HXLOGL4(HXLOG_RTSF, "CRTSPFFPacketQueue::PacketReady(Strm=%hu \
Time=%lu) BytesQueued=%ld", + uStreamNumber,
+ pPacket->GetTime(),
+ m_ulPacketBytesQueued);
- m_pFFResponse->PacketReady(HXR_OK, pPacket);
- }
+ m_pFFResponse->PacketReady(HXR_OK, pPacket);
+ }
- pPacket->Release();
- }
- else
- {
- if (m_bEndOfPackets)
- {
- retVal = HXR_OK;
- m_pStreams[uStreamNumber].SetStreamDone();
+ pPacket->Release();
+ }
+ else
+ {
+ if (m_bEndOfPackets)
+ {
+ retVal = HXR_OK;
+ m_pStreams[uStreamNumber].SetStreamDone();
- // We need to re-eval next packet stream number
- m_uNextPacketStreamNumber = INV_STREAM_NUM;
- }
-
- m_pMutex->Unlock();
+ // We need to re-eval next packet stream number
+ m_uNextPacketStreamNumber = INV_STREAM_NUM;
+ }
+
+ HX_UNLOCK(m_pMutex);
- if (m_pStreams[uStreamNumber].IsStreamDone() && m_pFFResponse)
- {
- HXLOGL4(HXLOG_RTSF, "CRTSPFFPacketQueue::StreamDone(Strm=%hu) BytesQueued=%ld",
- uStreamNumber,
- m_ulPacketBytesQueued);
+ if (m_pStreams[uStreamNumber].IsStreamDone() && m_pFFResponse)
+ {
+ HXLOGL4(HXLOG_RTSF, "CRTSPFFPacketQueue::StreamDone(Strm=%hu) \
BytesQueued=%ld", + uStreamNumber,
+ m_ulPacketBytesQueued);
- m_pFFResponse->StreamDone(uStreamNumber);
- }
- }
+ m_pFFResponse->StreamDone(uStreamNumber);
+ }
+ }
}
return retVal;
@@ -312,9 +313,9 @@
HXBOOL CRTSPFFPacketQueue::IsStreamDone(UINT16 uStreamNumber)
{
if (m_pStreams &&
- (uStreamNumber < m_uNumStreamHeaders))
+ (uStreamNumber < m_uNumStreamHeaders))
{
- return m_pStreams[uStreamNumber].IsStreamDone();
+ return m_pStreams[uStreamNumber].IsStreamDone();
}
return FALSE;
@@ -332,59 +333,59 @@
if (uStreamNumber == INV_STREAM_NUM)
{
- IHXPacket* pPacket;
- UINT32 ulStreamTime;
- UINT16 uStrmIdx;
+ IHXPacket* pPacket;
+ UINT32 ulStreamTime;
+ UINT16 uStrmIdx;
- m_pMutex->Lock();
+ HX_LOCK(m_pMutex);
- for (uStrmIdx = 0; uStrmIdx < m_uNumStreamHeaders; uStrmIdx++)
- {
- if (!m_pStreams[uStrmIdx].IsStreamDone())
- {
- if (m_pStreams[uStrmIdx].IsEmpty())
- {
- if (m_bEndOfPackets)
- {
- uStreamNumber = uStrmIdx;
- break;
- }
- }
- else
- {
- pPacket = m_pStreams[uStrmIdx].PeekPacket();
+ for (uStrmIdx = 0; uStrmIdx < m_uNumStreamHeaders; uStrmIdx++)
+ {
+ if (!m_pStreams[uStrmIdx].IsStreamDone())
+ {
+ if (m_pStreams[uStrmIdx].IsEmpty())
+ {
+ if (m_bEndOfPackets)
+ {
+ uStreamNumber = uStrmIdx;
+ break;
+ }
+ }
+ else
+ {
+ pPacket = m_pStreams[uStrmIdx].PeekPacket();
- if (pPacket)
- {
- if (pPacket->IsLost())
- {
- pPacket->Release();
- uStreamNumber = uStrmIdx;
- break;
- }
+ if (pPacket)
+ {
+ if (pPacket->IsLost())
+ {
+ pPacket->Release();
+ uStreamNumber = uStrmIdx;
+ break;
+ }
- ulStreamTime = pPacket->GetTime();
+ ulStreamTime = pPacket->GetTime();
- if (uStreamNumber == INV_STREAM_NUM)
- {
- ulMinStreamTime = ulStreamTime;
- uStreamNumber = uStrmIdx;
- }
- else if (((LONG32) (ulMinStreamTime - ulStreamTime)) > 0)
- {
- ulMinStreamTime = ulStreamTime;
- uStreamNumber = uStrmIdx;
- }
+ if (uStreamNumber == INV_STREAM_NUM)
+ {
+ ulMinStreamTime = ulStreamTime;
+ uStreamNumber = uStrmIdx;
+ }
+ else if (((LONG32) (ulMinStreamTime - ulStreamTime)) > 0)
+ {
+ ulMinStreamTime = ulStreamTime;
+ uStreamNumber = uStrmIdx;
+ }
- pPacket->Release();
- }
- }
- }
- }
+ pPacket->Release();
+ }
+ }
+ }
+ }
- m_uNextPacketStreamNumber = uStreamNumber;
+ m_uNextPacketStreamNumber = uStreamNumber;
- m_pMutex->Unlock();
+ HX_UNLOCK(m_pMutex);
}
return uStreamNumber;
@@ -396,12 +397,12 @@
if (m_pMutex)
{
- m_pMutex->Lock();
- bLocked = TRUE;
+ HX_LOCK(m_pMutex);
+ bLocked = TRUE;
}
HXLOGL3(HXLOG_RTSF, "CRTSPFFPacketQueue::Close() BytesQueued=%ld",
- m_ulPacketBytesQueued);
+ m_ulPacketBytesQueued);
Flush();
@@ -415,15 +416,15 @@
if (bLocked)
{
- m_pMutex->Unlock();
+ HX_UNLOCK(m_pMutex);
}
}
const char* CRTSPFFPacketQueue::StatusToString(RTSPFFPacketQueueStatus eStatus)
{
return (((eStatus >= RTSPFFPacketQueue_Normal) && (eStatus <= \
RTSPFFPacketQueue_Full)) ?
- m_zpStatusToStringMap[eStatus] :
- "????");
+ m_zpStatusToStringMap[eStatus] :
+ "????");
}
@@ -442,46 +443,46 @@
{
HX_RESULT retVal = HXR_UNEXPECTED;
- m_pMutex->Lock();
+ HX_LOCK(m_pMutex);
HXLOGL1(HXLOG_RTSF, "CRTSPFFPacketQueue::OnFileHeader()");
if (pValues && (!m_FileHeader.IsSet()))
{
- UINT32 ulStreamCount = 0;
- HX_ASSERT(m_uNumStreamHeaders == 0);
+ UINT32 ulStreamCount = 0;
+ HX_ASSERT(m_uNumStreamHeaders == 0);
- pValues->GetPropertyULONG32("StreamCount", ulStreamCount);
- m_uNumStreamHeaders = (UINT16) ulStreamCount;
+ pValues->GetPropertyULONG32("StreamCount", ulStreamCount);
+ m_uNumStreamHeaders = (UINT16) ulStreamCount;
- retVal = HXR_INVALID_PARAMETER;
- if (m_uNumStreamHeaders != 0)
- {
- m_FileHeader.Set(pValues);
- m_pStreams = new CMediaStream [m_uNumStreamHeaders];
- retVal = HXR_OUTOFMEMORY;
- if (m_pStreams)
- {
- retVal = HXR_OK;
+ retVal = HXR_INVALID_PARAMETER;
+ if (m_uNumStreamHeaders != 0)
+ {
+ m_FileHeader.Set(pValues);
+ m_pStreams = new CMediaStream [m_uNumStreamHeaders];
+ retVal = HXR_OUTOFMEMORY;
+ if (m_pStreams)
+ {
+ retVal = HXR_OK;
- for (ulStreamCount = 0;
- SUCCEEDED(retVal) && (ulStreamCount < m_uNumStreamHeaders);
- ulStreamCount++)
- {
- retVal = m_pStreams[ulStreamCount].Init(m_pContext);
- }
+ for (ulStreamCount = 0;
+ SUCCEEDED(retVal) && (ulStreamCount < m_uNumStreamHeaders);
+ ulStreamCount++)
+ {
+ retVal = m_pStreams[ulStreamCount].Init(m_pContext);
+ }
- // Indicate to player that we are recording only without rendering
- // and not acting as super-buffer (time-shifting buffer).
- if (SUCCEEDED(retVal))
- {
- retVal = HXR_RECORD_NORENDER;
- }
- }
- }
+ // Indicate to player that we are recording only without rendering
+ // and not acting as super-buffer (time-shifting buffer).
+ if (SUCCEEDED(retVal))
+ {
+ retVal = HXR_RECORD_NORENDER;
+ }
+ }
+ }
}
- m_pMutex->Unlock();
+ HX_UNLOCK(m_pMutex);
return retVal;
}
@@ -498,51 +499,51 @@
HXBOOL bHeadersReady = FALSE;
HX_RESULT retVal = HXR_UNEXPECTED;
- m_pMutex->Lock();
+ HX_LOCK(m_pMutex);
if (m_pStreams)
{
- UINT32 ulStreamNumber = 0;
+ UINT32 ulStreamNumber = 0;
- retVal = pValues->GetPropertyULONG32("StreamNumber", ulStreamNumber);
+ retVal = pValues->GetPropertyULONG32("StreamNumber", ulStreamNumber);
- if (SUCCEEDED(retVal))
- {
- HXLOGL1(HXLOG_RTSF, "CRTSPFFPacketQueue::OnStreamHeader(Strm=%ld)",
- ulStreamNumber);
+ if (SUCCEEDED(retVal))
+ {
+ HXLOGL1(HXLOG_RTSF, "CRTSPFFPacketQueue::OnStreamHeader(Strm=%ld)",
+ ulStreamNumber);
- retVal = HXR_INVALID_PARAMETER;
- if (ulStreamNumber < m_uNumStreamHeaders)
- {
- retVal = HXR_UNEXPECTED;
- if (!m_pStreams[ulStreamNumber].m_Header.IsSet())
- {
- retVal = HXR_OK;
- m_pStreams[ulStreamNumber].m_Header.Set(pValues);
+ retVal = HXR_INVALID_PARAMETER;
+ if (ulStreamNumber < m_uNumStreamHeaders)
+ {
+ retVal = HXR_UNEXPECTED;
+ if (!m_pStreams[ulStreamNumber].m_Header.IsSet())
+ {
+ retVal = HXR_OK;
+ m_pStreams[ulStreamNumber].m_Header.Set(pValues);
- m_uNumStreamHeadersReceived++;
+ m_uNumStreamHeadersReceived++;
- if (m_uNumStreamHeadersReceived == m_uNumStreamHeaders)
- {
- bHeadersReady = TRUE;
- }
- }
- }
- }
+ if (m_uNumStreamHeadersReceived == m_uNumStreamHeaders)
+ {
+ bHeadersReady = TRUE;
+ }
+ }
+ }
+ }
}
-
- m_pMutex->Unlock();
+
+ HX_UNLOCK(m_pMutex);
if (bHeadersReady)
{
- retVal = m_pRTSPFileFormat->OnHeadersReady(retVal);
+ retVal = m_pRTSPFileFormat->OnHeadersReady(retVal);
}
if (SUCCEEDED(retVal))
{
- // Indicate to player that we are recording only without rendering
- // and not acting as super-buffer (time-shifting buffer).
- retVal = HXR_RECORD_NORENDER;
+ // Indicate to player that we are recording only without rendering
+ // and not acting as super-buffer (time-shifting buffer).
+ retVal = HXR_RECORD_NORENDER;
}
return retVal;
@@ -555,76 +556,82 @@
* Purpose:
* send packets to record source
*/
+UINT32 nQPackCount = 0;
STDMETHODIMP CRTSPFFPacketQueue::OnPacket(IHXPacket* pPacket,
- INT32 nTimeOffset)
+ INT32 nTimeOffset)
{
HX_RESULT retVal = HXR_UNEXPECTED;
-
+#ifdef HELIX_FEATURE_SERVER
+ if (m_pFFResponse)
+ {
+ m_pFFResponse->PacketReady(HXR_OK, pPacket);
+ }
+ return HXR_OK;
+#endif
+
if (m_pStreams && pPacket)
{
- UINT16 uStreamNumber = pPacket->GetStreamNumber();
-
- retVal = HXR_OK;
-
- HXLOGL4(HXLOG_RTSF, "CRTSPFFPacketQueue::OnPacket(Strm=%hu, Time=%lu, Lost=%c) \
BytesQueued=%ld",
- uStreamNumber,
- pPacket->GetTime(),
- pPacket->IsLost() ? 'T' : 'F',
- m_ulPacketBytesQueued);
-
- if ((uStreamNumber < m_uNumStreamHeaders) &&
- (!m_pStreams[uStreamNumber].IsStreamDone()))
- {
- UINT32 ulPacketSize;
-
- retVal = HXR_OK;
+ UINT16 uStreamNumber = pPacket->GetStreamNumber();
- m_pMutex->Lock();
+ retVal = HXR_OK;
+ IHXBuffer* pBuffer = pPacket->GetBuffer();
+ HXLOGL4(HXLOG_RTSF, "CRTSPFFPacketQueue::OnPacket(Strm=%hu, Time=%lu, \
Lost=%c) BytesQueued=%ld", + uStreamNumber,
+ pPacket->GetTime(),
+ pPacket->IsLost() ? 'T' : 'F',
+ m_ulPacketBytesQueued);
+ HX_RELEASE(pBuffer);
+ if ((uStreamNumber < m_uNumStreamHeaders) &&
+ (!m_pStreams[uStreamNumber].IsStreamDone()))
+ {
+ UINT32 ulPacketSize;
- if (m_ulPacketBytesQueued < RTSPFF_FULL_QUEUE_BYTES_HARDSTOP)
- {
- HXBOOL bWasEmpty;
+ retVal = HXR_OK;
- bWasEmpty = m_pStreams[uStreamNumber].IsEmpty();
- ulPacketSize = m_pStreams[uStreamNumber].PutPacket(pPacket);
- m_ulPacketBytesQueued += ulPacketSize;
+ HX_LOCK(m_pMutex);
- if (m_ulPacketBytesQueued >= RTSPFF_FULL_QUEUE_BYTES)
- {
- if (m_eStatus != RTSPFFPacketQueue_Full)
- {
- RTSPFFPacketQueueStatus ePreviousStatus = m_eStatus;
- m_eStatus = RTSPFFPacketQueue_Full;
+ if (m_ulPacketBytesQueued < RTSPFF_FULL_QUEUE_BYTES_HARDSTOP)
+ {
+ HXBOOL bWasEmpty;
- m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus,
- ePreviousStatus,
- uStreamNumber);
- }
- }
+ bWasEmpty = m_pStreams[uStreamNumber].IsEmpty();
+ ulPacketSize = m_pStreams[uStreamNumber].PutPacket(pPacket);
+ m_ulPacketBytesQueued += ulPacketSize;
- if (bWasEmpty)
- {
- m_uNextPacketStreamNumber = INV_STREAM_NUM; // We need to re-eval next packet \
stream number
- m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus,
- m_eStatus,
- uStreamNumber);
- }
- }
- else
- {
- if (m_eStatus != RTSPFFPacketQueue_Full)
- {
- RTSPFFPacketQueueStatus ePreviousStatus = m_eStatus;
- m_eStatus = RTSPFFPacketQueue_Full;
+ if (m_ulPacketBytesQueued >= RTSPFF_FULL_QUEUE_BYTES)
+ {
+ if (m_eStatus != RTSPFFPacketQueue_Full)
+ {
+ RTSPFFPacketQueueStatus ePreviousStatus = m_eStatus;
+ m_eStatus = RTSPFFPacketQueue_Full;
+ m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus,
+ ePreviousStatus,
+ uStreamNumber);
+ }
+ }
- m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus,
- ePreviousStatus,
- uStreamNumber);
- }
- }
+ if (bWasEmpty)
+ {
+ m_uNextPacketStreamNumber = INV_STREAM_NUM; // We need to \
re-eval next packet stream number + \
m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus, + \
m_eStatus, + uStreamNumber);
+ }
+ }
+ else
+ {
+ if (m_eStatus != RTSPFFPacketQueue_Full)
+ {
+ RTSPFFPacketQueueStatus ePreviousStatus = m_eStatus;
+ m_eStatus = RTSPFFPacketQueue_Full;
+ m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus,
+ ePreviousStatus,
+ uStreamNumber);
+ }
+ }
- m_pMutex->Unlock();
- }
+ HX_UNLOCK(m_pMutex);
+ }
}
return retVal;
@@ -642,21 +649,31 @@
HX_RESULT retVal = HXR_UNEXPECTED;
HXBOOL bStreamDone = FALSE;
- m_pMutex->Lock();
+ HX_LOCK(m_pMutex);
HXLOGL1(HXLOG_RTSF, "CRTSPFFPacketQueue::OnEndOfPackets() BytesQueued=%ld",
- m_ulPacketBytesQueued);
+ m_ulPacketBytesQueued);
if (m_pRTSPFileFormat && (!m_bEndOfPackets))
{
- m_bEndOfPackets = TRUE;
-
- m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus,
- m_eStatus,
- INV_STREAM_NUM);
+ m_bEndOfPackets = TRUE;
+#ifndef HELIX_FEATURE_SERVER
+ m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus,
+ m_eStatus,
+ INV_STREAM_NUM);
+#else
+ for (UINT32 i = 0; i < m_uNumStreamHeaders; i++)
+ {
+ m_pStreams[i].SetStreamDone();
+ if (m_pFFResponse)
+ {
+ m_pFFResponse->StreamDone(i);
+ }
+ }
+#endif
}
- m_pMutex->Unlock();
+ HX_UNLOCK(m_pMutex);
return retVal;
}
@@ -675,44 +692,44 @@
if (m_pMutex)
{
- m_pMutex->Lock();
- bLocked = TRUE;
+ HX_LOCK(m_pMutex);
+ bLocked = TRUE;
}
HXLOGL1(HXLOG_RTSF, "CRTSPFFPacketQueue::Flush() BytesQueued=%ld",
- m_ulPacketBytesQueued);
+ m_ulPacketBytesQueued);
if (m_pStreams)
{
- UINT16 uStrmIdx;
+ UINT16 uStrmIdx;
- for (uStrmIdx = 0;
- (uStrmIdx < m_uNumStreamHeaders);
- uStrmIdx++)
- {
- m_pStreams[uStrmIdx].Flush();
- }
+ for (uStrmIdx = 0;
+ (uStrmIdx < m_uNumStreamHeaders);
+ uStrmIdx++)
+ {
+ m_pStreams[uStrmIdx].Flush();
+ }
- m_ulPacketBytesQueued = 0;
- m_bEndOfPackets = FALSE;
- m_uNextPacketStreamNumber = INV_STREAM_NUM; // We need to re-eval next packet \
stream number + m_ulPacketBytesQueued = 0;
+ m_bEndOfPackets = FALSE;
+ m_uNextPacketStreamNumber = INV_STREAM_NUM; // We need to re-eval next \
packet stream number
- if (m_eStatus != RTSPFFPacketQueue_Normal)
- {
- RTSPFFPacketQueueStatus ePreviousStatus = m_eStatus;
- m_eStatus = RTSPFFPacketQueue_Normal;
- if (m_pRTSPFileFormat)
- {
- m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus,
- ePreviousStatus,
- INV_STREAM_NUM);
- }
- }
+ if (m_eStatus != RTSPFFPacketQueue_Normal)
+ {
+ RTSPFFPacketQueueStatus ePreviousStatus = m_eStatus;
+ m_eStatus = RTSPFFPacketQueue_Normal;
+ if (m_pRTSPFileFormat)
+ {
+ m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus,
+ ePreviousStatus,
+ INV_STREAM_NUM);
+ }
+ }
}
if (bLocked)
{
- m_pMutex->Unlock();
+ HX_UNLOCK(m_pMutex);
}
return retVal;
@@ -853,9 +870,9 @@
while (!m_pPacketQueue->IsEmpty())
{
- pDeadItem = m_pPacketQueue->RemoveHead();
+ pDeadItem = m_pPacketQueue->RemoveHead();
- HX_RELEASE(pDeadItem);
+ HX_RELEASE(pDeadItem);
}
m_bStreamDone = FALSE;
Index: rtspfformat.cpp
===================================================================
RCS file: /cvsroot/datatype/rtsp/fileformat/rtspfformat.cpp,v
retrieving revision 1.6
retrieving revision 1.6.40.1
diff -u -d -r1.6 -r1.6.40.1
--- rtspfformat.cpp 3 May 2011 01:08:26 -0000 1.6
+++ rtspfformat.cpp 14 Nov 2013 09:51:24 -0000 1.6.40.1
@@ -70,7 +70,7 @@
#include "pckunpck.h"
#include "hxtlogutil.h"
#include "hxver.h"
-
+#include "hxthread.h"
#include "hlxclib/string.h"
#include "pckunpck.h"
@@ -170,6 +170,7 @@
, m_pMutex(NULL)
, m_eState(RTSPFF_Offline)
[...1146 lines suppressed...]
- retVal = m_pClientStateAdviseSinkControl->AddClientStateAdviseSink(
- (IHXClientStateAdviseSink*) this);
- }
+ if (SUCCEEDED(retVal))
+ {
+ retVal = m_pClientStateAdviseSinkControl->AddClientStateAdviseSink(
+ (IHXClientStateAdviseSink*) this);
+ }
- if (FAILED(retVal))
- {
- HX_RELEASE(m_pClientStateAdviseSinkControl);
- }
+ if (FAILED(retVal))
+ {
+ HX_RELEASE(m_pClientStateAdviseSinkControl);
+ }
}
return retVal;
_______________________________________________
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