2011-06-20
在基于wince6.0的流媒体播放《一》中链接jrtplib.lib并编译通过了,接下来正式进入编程阶段。
从流媒体服务器的功能需求看,服务器需要打开流媒体文件,并通过rtp协议将数据发送到客户端,由于RTP/RTCP协议已经被封装成jrtplib.lib,我们只需要调用jrtplib的接口就可以了。
打开流媒体文件不需要多说,重点是通过rtp协议发送数据,jrtplib本身是有sample的,虽然这个sample对于流媒体播放没有任何帮助,但起码他演示了如何通过jrtplib发送rtp数据。
在网上有很多关于jrtplib的sample的介绍说明(话说也就sample的说明了,其它真正跟流媒体播放相关的资料几乎没有。。)
如:关于开源的RTP——jrtplib的使用(2)
rtp数据收发就不再多说了,网上很多
主要是如何用rtp控制并播放流媒体数据。
要实现流媒体播放,首先需要实现收发数据的控制,我们可以自定义一个数据结构来进行控制
enum _MSGTYPE{
QUEST_DATA,
QUEST_LENGTH,
REPLY_DATA,
REPLY_LENGTH
};
enum _MSGSUBTYPE {
FRAMESTART,
FRAME,
FRAMEEND,
OTHER
};
typedef struct _CTRLMSG
{
_MSGTYPE msgType;
_MSGSUBTYPE msgSubType;
LONGLONG lPos;
DWORD dwBytesToRead;
DWORD dwLength;
}CTRLMSG,*PCTRLMSG;
在流媒体数据之前加上CTRLMSG来控制流媒体的收发。
由client主动读取流媒体数据,Type控制指令,Pos控制读取(播放)的点,dwBytesToRead控制要读取的长度,dwLength控制要发送的数据长度。
这样就实现了流媒体数据的发送,client接收到数据后就可以根据需要自由处理。