LINUX下RTSP编程实践(linuxrtsp编程)
随着视频应用的火热,RTSP(Real Time Streaming Protocol,实时流媒体协议)在数据交换中被大量使用, 并能满足实时的应用状况, 在一些产品的设计上也是十分重要的.
假如我们需要开发一个多媒体应用,采用Linux系统,那么在实现RTSP通信上需要花费一定的精力。本文就就通过LINUX下RTSP编程实践来阐述LINUX实现RTSP协议的一些重要的操作。
首先,在实现RTSP协议的过程中,需要用到网络编程的技术,而这是在LINUX系统中非常容易实现的,实现基本的网络编程。只需使用一些简单的函数,就可以完成基本的TCP/UDP通信。以下为一个TCP通信的编程例子:
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc , char *argv[])
{
int sockfd,n;
int portno = 8888;
struct sockaddr_in serv_addr;
/*Create a socket */
sockfd = socket(AF_INET,SOCK_STREAM,0);
/* Set all the values in the serv_addr to zero*/
bzero((char*)&serv_addr,sizeof(serv_addr));
/*Assign IP address and port number*/
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(“127.0.0.1”);
serv_addr.sin_port = htons(portno);
/* Connect to Server */
connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr));
return 0;
}
其次,在实现RTSP协议时,分析RTSP传输协议非常重要,在实现RTSP传输时需注意一些服务器端和客户端需要进行的动作,以及服务器端与客户端之间的传输通信。
由于RTSP是一种实时媒体传输协议,整体上包括客户端首先发送DESCRIBE请求(定义资源,以获取资源的构成和支持的传输方法),
sting message = “DESCRIBE rtsp://127.0.0.1/test.mkv RTSP/1.0\n”+
“CSeq: 2\n”+
“User-Agent: LibVLC/3.0.4 (LIVE555 Streaming Media v2016.02.22)\n\n”;
if( send(sockfd,message,sizeof(message.c_str()),0)
{
printf(“Send failed\n”);
return 1;
}
发送SETUP请求(给服务器指定客户端的接收端口,并将服务器上的某一资源绑定到某一客户端),
string message = “SETUP rtsp://127.0.0.1/test.mkv/trackID=1 RTSP/1.0\n”+
“CSeq: 3\n”+
“User-Agent: LibVLC/3.0.4 (LIVE555 Streaming Media v2016.02.22)\n\n”;
if( send(sockfd,message,sizeof(message.c_str()),0)
{
printf(“Send failed\n”);
return 1;
}
以及PLAY请求(启动播放)等操作。
string message = “PLAY rtsp://127.0.0.1/test.mkv RTSP/1.0\n”+
“CSeq: 4\n”+
“User-Agent: LibVLC/3.0.4 (LIVE555 Streaming Media v2016.02.22)\n\n”;
if( send(sockfd,message,sizeof(message.c_str()),0)
{
printf(“Send failed\n”);
return 1;
}
总的来说,LINUX下的RTSP编程从网络编程和RTSP协议的分析两个方面来实现,编程实践结合上也是有必要的指导。