取rtsp流数据_RTSP视频播放器核心代码讲解及源码分享

895192a5551b12249e98542fe84cf097.png

1 RTSP鉴权认证

RTSP服务器端出于安全考虑需要客户端访问服务器的时候需要带着用户名和密码进行校验的过程。RTSP两种认证方式包括基本认证(basic authentication)和摘要认证(digest authentication)。

(1)基本认证(basic authentication)

base64 (username:password)

(2)摘要认证(digest authentication)

response计算方法如下:

RTSP客户端应该使用username+ password并计算response如下:

response=md5(md5(username:realm:password):nonce:md5(method:url));

2 RTP OVER TCP传输模

一般我们都是通过UDP方式发送RTP流,使用RTSP/RTP这种模式需要打开多个UDP端口,每一路流需要两个UDP端口(一个RTP的媒体数据端口一个RTCP的控制信息)。

在互联网上使用UDP不太合适。(1)如果Internet网上的路由器没有打开这些端口就会出现一定的问题。(2)有可能中间的网络路由器过滤或者忽略掉UDP数据包系统就会出现一些问题。(3)UDP是不可靠的传输协议在Internet网上面临着丢包的情景。有兴趣有需要的查看RFC2326 10章12节。

3 RTP打包发送h264数据

由于以太网 (Ethernet)协议的MTU为1500字节,当传输的数据大于1500,该数据报文将被分片。因此在发送RTP包时分两种情况:

(1)当一个NALU小于MTU 字节的时候,采用一个单RTP包发送

(2)当一个NALU大于等于MTU 字节的时候,采用FU-A分片发送

FU-A分片发送是根据S(起始)E(结束)R以及M(标记)来控制的,详细流程如下:

当发送第一个的FU时,S=1,E=0,R=0;并设置rtp M 位为0;

当发送中间的FU时,S=0,E=0,R=0;

当发送最后一个FU时,S=0,E=1,R=0;并设置rtp M 位为1;

核心代码:

while(!feof(bits)) 
{
    
	GetAnnexbNALU(nal);//每执行一次,文件的指针指向本次找到的NALU的末尾,
	//下一个位置即为下个NALU的起始码0x000001
	dump( nal );//输出NALU长度和TYPE

	memset(sendbuf,0,1500);//清空sendbuf;

	//rtp固定包头,为12字节,
	rtp_hdr =(RTP_FIXED_HEADER*)&sendbuf[0]; 
	rtp_hdr->version = 2;   //版本号,此版本固定为2
	rtp_hdr->marker  = 0;   //标志位,由具体协议规定其值。
	rtp_hdr->payload = H264;//负载类型号,
	rtp_hdr->ssrc    = htonl(10);//随机指定为10,并且在本RTP会话中全局唯一

	//当一个NALU小于1400字节的时候,采用一个单RTP包发送
	if( nal->len<=UDP_MAX_SIZE)
	{
    
		//设置rtp M 位;
		rtp_hdr-
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值