点播系统的流程一般分为,
下面从几个方面做分析。
一.数据源
点播源可以为实时数据,也可以为录像,可以为纯视频,也可以为音视频。
二.交互命令
命令交互可以使用标准的RTSP协议,也可以用自定义协议,协议最少要提供如下接口。
1. 连接 //作为业务交互的链路。
2. 播放(重播) //获取码流数据。
3. 停止(暂停) //停止获取码流。
4. 断连 //断开业务链路。
三.数据传输
用RTP传输音视频要比用TCP,UDP方便的,参见:http://blog.youkuaiyun.com/evsqiezi/article/details/7899886,对RTP,RTCP做封装的库有LIVE555,JRTP.
四 解码
五显示
要按时间戳进行显示,如下;
//Frame Info
typedef struct{ long nWidth;long nHeight;long nStamp;long nType;long nFrameRate;DWORD dwFrameNum;
}FRAME_INFO;
int m_bVFirst = ture;
DWORD m_nLastTime = 0;
DWORD m_nlastStamp = 0;
void DecCBFun( char* pBuf, long nSize, void* pFrameInfo)
{
FRAME_INFO* ptFrameInfo = (FRAME_INFO*)pFrameInfo;
}
if(m_bVFirst)
{
m_nlastStamp = ptFrameInfo->nStamp;
m_nLastTime = GetTickCount();
}
DWORD m_dwCurRate = ptFrameInfo->nStamp - m_nlastStamp - (GetTickCount() - m_nLastTime);
if(m_dwCurRate > 0) Sleep(m_dwCurRate);
...//视频数据。
}
六.界面
协议都定义好了,就准备个界面做调用,如下。
有可能还需要其他接口,如快进,快退,调整音量,配置。
问题的定位。
点播系统出问题,要查出客户端,服务器那边出问题,那块出问题。排查的步骤如下。
1. 服务器发的数据无误。
2. 客户端接收到正确的数据。
3. 客户端解码正确。