21451|20

888

帖子

3

TA的资源

五彩晶圆(初级)

楼主
 

RTSP/RTP和live555通信详解,搭建流媒体服务器 [复制链接]

 
本帖最后由 37°男人 于 2014-1-19 11:03 编辑

1、从下图可以发现,rtsp是基于tcp可靠连接,而rtp是基于udp不可靠连接,所以在创建网络socket的时候需要分别经行创建。


2、创建rtsp网络连接
sfd = socket(AF_INET, SOCK_STREAM, 0);
bind(sfd, (struct sockaddr*)&addr, sizeof(addr));
listen(sfd, 10);
clifd = accept(sfd, (struct sockaddr*)&addr, &addrlen);
等待live555发送rtsp报文协议(请求)

3、对rtsp报文OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUS,GET_PARAMETER, SET_PARAMETER经行解析
解析出对应的报文,经行分析处理
        if(strncmp(array[0],"OPTIONS",7) == 0)
        {
                printf("xubinbin line:%d;\n",__LINE__);
                send(clifd, str_options, strlen(str_options), 0);
        }
        else if(strncmp(array[0],"DESCRIBE",8) == 0)
        {
                printf("xubinbin line:%d;\n",__LINE__);
                send(clifd, str_describe, strlen(str_describe), 0);
        }
        else if(strncmp(array[0],"SETUP",5) == 0)

4、sdp协议处理
在rtsp报文describe请求后,要求获取音视频的基本信息
服务器的应答信息
                "Content-type: application/sdp\r\n"
                "Content-length: 392\r\n"
的后面就是跟392字节的sdp信息(具体查看sdp协议)

5、网络端口的设置(设置rtp通信端口)
这一步非常的重要,端口错了就没有办法通信了,在rtsp报文setup中
客户端(live555)发送setup报文,报文中包括了rtp中通信的客户端的端口号
服务器的应答信息中,应当把客户端和服务器的端口号都告诉客户端
client_port=%d-%d;server_port=6970-6971\r\n
(附:这里的通信模式和飞鸽传书的协议有点类似,命令和数据分开分别发送)

6、数据的发送
在收到rtsp报文paly请求,发送rtsp应当信息后就可以直接给客户端发送rtp数据了
        else if(strncmp(array[0],"PLAY",4) == 0)
        {
                printf("xubinbin line:%d;\n",__LINE__);
                send(clifd, str_play, strlen(str_play), 0);
                //创建rtp处理线程,用udp发送数据
                pthread_create(&tid_udp,NULL,(void *)udp_process,(void *)NULL);                        //udp获取信息        
        }
单独创建一个线程来发送rtp数据,这样可以同时响应多路请求

7、发送rtp数据
在发送rtp数据的时候要设置rtp信息头12字节,后面再跟音视频数据。

8、网络抓包信息

9、live555收看音视频数据流


10、终端打印信息
root@embeded-server:/home/xbb/test/live555/rtsp/1_rtsp_test# ./target
listenning....
###############################
connected from: 192.168.1.254
recv:OPTIONS rtsp://192.168.1.44:8554/123445 RTSP/1.0
CSeq: 2
User-Agent: LibVLC/2.0.8 (LIVE555 Streaming Media v2012.12.18)
array = *OPTIONS rtsp://192.168.1.44:8554/123445 RTSP/1.0*
array = *CSeq: 2*
array = *User-Agent: LibVLC/2.0.8 (LIVE555 Streaming Media v2012.12.18)*
array = *(null)*
xubinbin line:211;
xubinbin line:216;
time:*Sat Jan 18 03:49:43 2014
*;
xubinbin line:275;
###############################
connected from: 192.168.1.254
recv:DESCRIBE rtsp://192.168.1.44:8554/123445 RTSP/1.0
CSeq: 3
User-Agent: LibVLC/2.0.8 (LIVE555 Streaming Media v2012.12.18)
Accept: application/sdp
array = *DESCRIBE rtsp://192.168.1.44:8554/123445 RTSP/1.0*
array = *CSeq: 3*
array = *User-Agent: LibVLC/2.0.8 (LIVE555 Streaming Media v2012.12.18)*
array = *Accept: application/sdp*
array = *(null)*
xubinbin line:211;
xubinbin line:221;
time:*Sat Jan 18 03:49:43 2014
*;
xubinbin line:275;
###############################
connected from: 192.168.1.254
CSeq: 4
User-Agent: LibVLC/2.0.8 (LIVE555 Streaming Media v2012.12.18)
Transport: RTP/AVP;unicast;client_port=64706-64707
array = *CSeq: 4*
array = *User-Agent: LibVLC/2.0.8 (LIVE555 Streaming Media v2012.12.18)*
array = *Transport: RTP/AVP;unicast;client_port=64706-64707*
array = *(null)*
xubinbin line:211;
xubinbin line:226;
client_port_buf = *=64706-64707*
rtp_cli_port = *64706*
time:*Sat Jan 18 03:49:43 2014
*;
xubinbin line:275;
###############################
connected from: 192.168.1.254
CSeq: 5
User-Agent: LibVLC/2.0.8 (LIVE555 Streaming Media v2012.12.18)
Session: 755163C8
Range: npt=0.000-
array = *PLAY rtsp://192.168.1.44:8554/123445 RTSP/1.0*
array = *CSeq: 5*
array = *User-Agent: LibVLC/2.0.8 (LIVE555 Streaming Media v2012.12.18)*
array = *Session: 755163C8*
array = *Range: npt=0.000-*
array = *(null)*
xubinbin line:211;
xubinbin line:246;
time:*Sat Jan 18 03:49:43 2014
*;
xubinbin line:275;
###############################
connected from: 192.168.1.254
11、源码编译、下载(附件下载源码)
gcc server.c -o target -lpthread

技术交流:xubbwd@gmail.com

游客,如果您要查看本帖隐藏内容请回复



最新回复

小白还是得多折腾折腾,已自行解决。  详情 回复 发表于 2017-9-27 15:37
点赞 关注(1)
个人签名邮箱:ternence.hsu@foxmail.com
 
 

回复
举报

2002

帖子

24

TA的资源

五彩晶圆(高级)

沙发
 
不明觉厉
 
 
 

回复

5979

帖子

8

TA的资源

版主

板凳
 
这是在做什么好玩的东西
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
写得很简单
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

5
 
不错,看看。
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

6
 
很简单,对学习rtsp的新手很有帮助。再次感谢楼主无私分享。
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

7
 
好东西,学习啦

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
好像很高端,理解不能
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
看看,辛苦了
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

10
 
刚开始学习rtsp,还望楼主多多指教啊
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

11
 
学习学习,谢谢楼主的分享
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
非常感谢
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

13
 
谢谢 看看

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

14
 
学习。。。。。。。。。。。。啊,,,
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

15
 
不错,研究研究
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

16
 
初涉及这部分内容  很不错  谢谢分享了
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

17
 
我现在做项目,就非常需要博主的源码,能学到很多,非常感谢你!
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

18
 
我想问问怎么运行你的代码呢,急,谢谢!

点评

在linux 下编译过就可以进行测试了  详情 回复 发表于 2015-3-31 10:28
 
 
 

回复

888

帖子

3

TA的资源

五彩晶圆(初级)

19
 
liuluyeah 发表于 2015-3-31 09:25
我想问问怎么运行你的代码呢,急,谢谢!

在linux 下编译过就可以进行测试了
个人签名邮箱:ternence.hsu@foxmail.com
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

20
 
感谢博主的无私奉献!!
目前我对流媒体是小白一个,希望博主不吝赐教。
参考博主的操作,没能使用vlc播放视频,不知道是哪里设置不对,我这边在linux主机终端打印如下:
###############################
connected from: 192.168.1.115
recv:
array = *(null)*
array = *(null)*


###############################
connected from: 192.168.1.115
recv:
array = *(null)*
array = *(null)*
VLC截图如下:



 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表