[live555]RTSP与live555通信的介绍
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、支持wowza的极酷阳光播放器下载:http://www.cuplayer.com/CuSunPlayer/download.html
热门文章推荐
- [live555]live555直播rtsp流
- [live555]Live555学习资料及下载
- [live555]rtsp直播基于live555的实现
- [rtsp]海康Hikvision Tools(SADP搜索摄像头工具)下载
- [Live555]live555中处理mpeg4
- [NVR]海康网络摄像机录像时间怎么自定义设置
- [RTSP]RTSP常用方法实例
- [udp]为什么视频数据一般都用UDP协议进行传输