|
|
|
@ -48,7 +48,6 @@ CTranscoder::CTranscoder()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
m_bStopThread = false;
|
|
|
|
m_bStopThread = false;
|
|
|
|
m_pThread = NULL;
|
|
|
|
m_pThread = NULL;
|
|
|
|
m_Streams.reserve(12);
|
|
|
|
|
|
|
|
m_bConnected = false;
|
|
|
|
m_bConnected = false;
|
|
|
|
m_LastKeepaliveTime.Now();
|
|
|
|
m_LastKeepaliveTime.Now();
|
|
|
|
m_LastActivityTime.Now();
|
|
|
|
m_LastActivityTime.Now();
|
|
|
|
@ -62,25 +61,7 @@ CTranscoder::CTranscoder()
|
|
|
|
|
|
|
|
|
|
|
|
CTranscoder::~CTranscoder()
|
|
|
|
CTranscoder::~CTranscoder()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// close all streams
|
|
|
|
Close();
|
|
|
|
m_Mutex.lock();
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
for ( int i = 0; i < m_Streams.size(); i++ )
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
delete m_Streams[i];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
m_Streams.clear();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
m_Mutex.unlock();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// kill threads
|
|
|
|
|
|
|
|
m_bStopThread = true;
|
|
|
|
|
|
|
|
if ( m_pThread != NULL )
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
m_pThread->join();
|
|
|
|
|
|
|
|
delete m_pThread;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
@ -120,9 +101,9 @@ void CTranscoder::Close(void)
|
|
|
|
// close all streams
|
|
|
|
// close all streams
|
|
|
|
m_Mutex.lock();
|
|
|
|
m_Mutex.lock();
|
|
|
|
{
|
|
|
|
{
|
|
|
|
for ( int i = 0; i < m_Streams.size(); i++ )
|
|
|
|
for ( auto it=m_Streams.begin(); it!=m_Streams.end(); it++ )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
delete m_Streams[i];
|
|
|
|
delete *it;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
m_Streams.clear();
|
|
|
|
m_Streams.clear();
|
|
|
|
|
|
|
|
|
|
|
|
@ -271,39 +252,39 @@ void CTranscoder::ReleaseStream(CCodecStream *stream)
|
|
|
|
bool found = false;
|
|
|
|
bool found = false;
|
|
|
|
Lock();
|
|
|
|
Lock();
|
|
|
|
{
|
|
|
|
{
|
|
|
|
for ( int i = 0; (i < m_Streams.size()) && !found; i++ )
|
|
|
|
for ( auto it=m_Streams.begin(); it!=m_Streams.end(); it++ )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// compare object pointers
|
|
|
|
// compare object pointers
|
|
|
|
if ( (m_Streams[i]) == stream )
|
|
|
|
if ( (*it) == stream )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// send close packet
|
|
|
|
// send close packet
|
|
|
|
EncodeClosestreamPacket(&Buffer, m_Streams[i]->GetStreamId());
|
|
|
|
EncodeClosestreamPacket(&Buffer, (*it)->GetStreamId());
|
|
|
|
m_Socket.Send(Buffer, m_Ip, TRANSCODER_PORT);
|
|
|
|
m_Socket.Send(Buffer, m_Ip, TRANSCODER_PORT);
|
|
|
|
|
|
|
|
|
|
|
|
// display stats
|
|
|
|
// display stats
|
|
|
|
if ( m_Streams[i]->GetPingMin() >= 0.0 )
|
|
|
|
if ( (*it)->GetPingMin() >= 0.0 )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
char sz[256];
|
|
|
|
char sz[256];
|
|
|
|
sprintf(sz, "ambed stats (ms) : %.1f/%.1f/%.1f",
|
|
|
|
sprintf(sz, "ambed stats (ms) : %.1f/%.1f/%.1f",
|
|
|
|
m_Streams[i]->GetPingMin() * 1000.0,
|
|
|
|
(*it)->GetPingMin() * 1000.0,
|
|
|
|
m_Streams[i]->GetPingAve() * 1000.0,
|
|
|
|
(*it)->GetPingAve() * 1000.0,
|
|
|
|
m_Streams[i]->GetPingMax() * 1000.0);
|
|
|
|
(*it)->GetPingMax() * 1000.0);
|
|
|
|
std::cout << sz << std::endl;
|
|
|
|
std::cout << sz << std::endl;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ( m_Streams[i]->GetTimeoutPackets() > 0 )
|
|
|
|
if ( (*it)->GetTimeoutPackets() > 0 )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
char sz[256];
|
|
|
|
char sz[256];
|
|
|
|
sprintf(sz, "ambed %d of %d packets timed out",
|
|
|
|
sprintf(sz, "ambed %d of %d packets timed out",
|
|
|
|
m_Streams[i]->GetTimeoutPackets(),
|
|
|
|
(*it)->GetTimeoutPackets(),
|
|
|
|
m_Streams[i]->GetTotalPackets());
|
|
|
|
(*it)->GetTotalPackets());
|
|
|
|
std::cout << sz << std::endl;
|
|
|
|
std::cout << sz << std::endl;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// and close it
|
|
|
|
// and close it
|
|
|
|
m_Streams[i]->Close();
|
|
|
|
(*it)->Close();
|
|
|
|
delete m_Streams[i];
|
|
|
|
delete (*it);
|
|
|
|
m_Streams.erase(m_Streams.begin()+i);
|
|
|
|
m_Streams.erase(it);
|
|
|
|
found = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -398,4 +379,3 @@ void CTranscoder::EncodeClosestreamPacket(CBuffer *Buffer, uint16 uiStreamId)
|
|
|
|
Buffer->Set(tag, sizeof(tag));
|
|
|
|
Buffer->Set(tag, sizeof(tag));
|
|
|
|
Buffer->Append((uint16)uiStreamId);
|
|
|
|
Buffer->Append((uint16)uiStreamId);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|