一种rtmp流媒体公网直播系统及其设计方法_2

文档序号:8286231阅读:来源:国知局
typedef struct RTMPPacket{
uint8_t m—headerType; uint8_t m—packetType; int m_nChanneI; uint32_t m—nTimeStamp; int32_t m_nInfoField2; uint32_t m—nBodySize; uint32_t m—nBytesRead; char 氺m—body;
} RTMPPacket;
按照RTMP协议,将RTMP主播设备101编码后的音视频数据打包处理,并设置专门的线程函数进行流媒体的发送。
[0024]203、流媒体服务器103请求信令分析并进行流媒体分发;
流媒体服务器103收到用户接入请求后,先分析该请求的流是否已经向其正在发送流,如果没有向流媒体服务器103发送流,则先将该流请求转发给RTMP主播设备101,当RTMP主播设备101启动向流媒体服务器103推送RTMP流后,流媒体服务器103将此流分发给所请求的用户;如果有向流媒体服务器103发送流,则不必再将该流请求转发给RTMP主播设备101,流媒体服务器103直接将对应的RTMP流分发给所请求的用户。
[0025]204、客户端104显示;
首先由客户端104发起RTMP流接入请求,当客户端104在预设时间段之内收到该流,则客户端104向流媒体服务器103发送确认响应消息,以通知流媒体服务器客户端接收到流媒体服务器103发送的RTMP流;如果客户端104在预设时间段之内没有收到该视频帧,则客户端104向流媒体服务器103发送丢失响应消息,以通知流媒体服务器客户端没有接收到流媒体服务器103发送的RTMP流。
[0026]本实施例提供的方法,在流媒体直播过程中,接收用户的交互数据,获取与用户交互数据相匹配的媒体流,由于在直播过程中,不仅单纯地对媒体数据进行播放,还可以实现媒体直播系统与媒体接收用户间的数据交互。
[0027]图3是本发明实施例的网络通信模型原理结构示意图,以下将详细叙述上述步骤203中的信令交互过程:
301、用户请求接入网络,向RTMP主播设备101发出开始直播请求信令;
客户端104发送开始直播请求信令到流媒体服务器103,流媒体服务器103收到一个开始直播请求后,将该开始直播请求信令转发给相应的RTMP主播设备101。其中信令说明如下:
typedef struct TLoginPkt { char UserName[20] ;// 用户名称
char Password[20] ;// 用户密码
char DevIP [20] ;//要连接的设备
Bool bLive;//直播状态
unsigned int UserCnt // 在线用户数}TLoginPkt;typedef enum TMsgID {
Msg_StartStatus= 1001, // RTMP 发送状态
Msg_StopStatus= 1002, // RTMP 停止状态
Msg_SetDevCfg= 1003,//设备配置
Msg_GetDevCfg= 1004,//获取配置
Msg_RTMPStartcfg = 1005,//RTMP 发送Msg_RTMPStopcfg= 1006,//RTMP 停止发送}TMsgID;
如果分析TLoginPkt为在线用户请求视频直播接入,当分析出RTMP主播设备101的TMsgID号为1001,所请求用户的bLive = true时,则表示正在向流媒体服务器103推送RTMP流,当RTMP主播设备101分析收到的TMsgID号为1005时,则RTMP主播设备101忽略请求;所请求用户的bLive = flase时,则表示已经开始向流媒体服务器103推送RTMP流,但流媒体服务器103并没有向所请求的用户推送RTMP流。
[0028]如果分析TLoginPkt为新用户请求视频直播接入,当RTMP主播设备101分析接收到的TMsgID号为1005时,则表示向流媒体服务器103请求推送RTMP流。
[0029]302、接收流媒体服务器103发送的丢帧指示值,该丢帧指示值用于指示在该时间段内是否存在网络带宽超出预设定阀值;
其中,RTMP主播设备101采样一个视频帧,对该视频帧进行H.264编码后上传到流媒体服务器103,而流媒体服务器103也是收到一个视频帧后,将该视频帧转发给客户端104。当客户端104在预设时间段之内收到该视频帧,则客户端104向流媒体服务器103发送确认响应消息,以通知流媒体服务器103其已接收到服务器103发送的视频帧。如果客户端104在预设时间段之内没有收到该视频帧,则客户端104向流媒体服务器103发送丢失响应消息,以通知流媒体服务器103其没有接收到流媒体服务器103发送的视频帧。
[0030]当流媒体服务器103收到RTMP主播设备101发送的关键帧时,流媒体服务器103设置视频帧丢失个数的初始值,并将接收的关键帧转发给客户端104。当流媒体服务器103在当前接收的关键帧与下一个接收的关键帧之间的时间间隔内接收到客户端104发送的丢帧响应消息时,流媒体服务器103增加视频帧丢失个数,并且当流媒体服务器103收到RTMP主播设备101发送的下一个关键帧时,流媒体服务器103根据该视频帧丢失个数设置丢帧指示值,将该丢帧指示值发送给RTMP主播设备101。
[0031]当RTMP主播设备101收到流媒体服务器103发送的视频丢帧指示值后,RTMP主播设备101的编码器相应的调整G0P、视频流码率、分辨率、帧率等编码参数,主播设备101的编码器切换到编码副码流,并强制编码成I帧数据进行发送。当实时性要求不严格时,当主播设备101收到服务器103发送的编码副码流视频信令时,并不用去强制编码成I帧数据进行发送,I帧数据的检测由流媒体服务器103进行处理,或直接由客户端104的解码器进行处理。
[0032]303、用户请求接入网络,向RTMP主播设备101发出开始强制编码I帧请求信令; 客户端104发送开始直播请求信令到流媒体服务器103,流媒体服务器103收到一个开始直播请求后,如果分析TLoginPk为新用户请求视频接入,当分析出RTMP主播设备101的TMsgID号为1001时,则表示已经开始向流媒体服务器103推送RTMP流。当分析出RTMP主播设备的TMsgID号为1002时,则表示已经停止向流媒体服务器103推送RTMP流。此时,RTMP主播设备101强制编码I帧,并开始向流媒体服务器103发送。
[0033]如果分析TLoginPkt为在线用户请求视频接入,当分析出RTMP主播设备101的TMsgID号为1001、所请求用户的bLive = true时,贝U表示已经开始向流媒体服务器103推送RTMP流,RTMP主播设备101忽略请求。当分析出RTMP主播设备101的TMsgID号为1002时,则表示已经停止向流媒体服务器103推送RTMP流,此时,RTMP主播设备101强制编码I帧,并开始向流媒体服务器103发送。
[0034]如果分析TLoginPkt为在线用户请求视频接入,当分析出RTMP主播设备101的TMsgID号为1001、所请求用户的bLive = flase时,贝U表示已经开始向流媒体服务器103推送RTMP流,但服务器103并没有向所请求的用户推送RTMP流,此时,RTMP主播设备101强制编码I帧,并开始向流媒体服务器103发送。当分析出RTMP主播设备的TMsgID号为1002时,则表示已经停止向流媒体服务器103推送RTMP流,此时,RTMP主播设备101强制编码I帧,并开始向流媒体服务器103发送。
[0035]当实时性要求不严格时,并不用去强制编码成I帧数据进行发送,I帧数据的检测由流媒体服务器103进行处理,或者I帧数据的检测流媒体服务器103也不用进行处理,直接由客户端104的解码器进行处理。
[0036]304、用户请求退出网络,向RTMP主播设备101发出停止直播请求信令;
客户端104发送停止直播请求信令到流媒体服务器103
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1