从crtmpserver中看具体处理rtmp协议的流程5

在读到18bytes

同样的去掉12bytes的头

bool RTMPProtocolSerializer::Deserialize(Header &header, IOBuffer &buffer,
		Variant &message) {
	switch (H_MT(header)) {
	case RM_HEADER_MESSAGETYPE_USRCTRL:
			{
				return DeserializeUsrCtrl(buffer, message[RM_USRCTRL]);
	}
	}
}

bool RTMPProtocolSerializer::DeserializeUsrCtrl(IOBuffer &buffer, Variant &message) {
	...
	switch ((uint16_t) message[RM_USRCTRL_TYPE]) {
		...
		case RM_USRCTRL_TYPE_STREAM_SET_BUFFER_LENGTH:
		{
			AMF_CHECK_BOUNDARIES(buffer, 8);
			message[RM_USRCTRL_STREAMID] = ENTOHLP(GETIBPOINTER(buffer)); //----MARKED-LONG---
			if (!buffer.Ignore(4)) {
				FATAL("Unable to ignore 4 bytes");
				return false;
			}
			message[RM_USRCTRL_BUFFLEN] = ENTOHLP(GETIBPOINTER(buffer)); //----MARKED-LONG---
			if (!buffer.Ignore(4)) {
				FATAL("Unable to ignore 4 bytes");
				return false;
			}
			return true;
		}		
	}
}



在InboundMessageAvailable中进行回应


bool BaseRTMPAppProtocolHandler::InboundMessageAvailable(BaseRTMPProtocol *pFrom,
		Variant &request) {
	...
	switch ((uint8_t) VH_MT(request)) {
	case RM_HEADER_MESSAGETYPE_USRCTRL:
				{
					return ProcessUsrCtrl(pFrom, request);
	}
	}
}


bool BaseRTMPAppProtocolHandler::ProcessUsrCtrl(BaseRTMPProtocol *pFrom,
		Variant &request) {
	switch ((uint16_t) M_USRCTRL_TYPE(request)) {
	case RM_USRCTRL_TYPE_PING_RESPONSE:
				{
	这个函数说他啥都没干= =
					return true;
	}
	}
}

还是回复了468bytes的数据,但暂时没清楚



6.直接发送音视频了


7.好了,博主准备太监了,带着一大堆朦胧的概念,准备完成一个更小的rtmpserver(写代码能力有限,估计这个server不会超过1K行),遇到困难,只能从crtmpserver中抽取代码了~~~~(>_<)~~~~ 


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值