2012-02-10 66 views
1

我只是试图实现一个真正非常小的RTSP客户端和Boost Asio。它只需要SETUP服务器然后调度一个PLAY命令,然后在某个时候请求TEARDOWN实现一个简单的RTSP客户端/示例

麻烦我是实施本身。 对于连接本身我这样做我会希望有一个TCP连接

tcp::resolver resolver(*io_service); 
tcp::resolver::query query("192.168.0.42","554"); 
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); 
tcp::resolver::iterator end; 


tcp::socket socket(*io_service); 
boost::system::error_code error = boost::asio::error::host_not_found; 
while (error && endpoint_iterator != end) 
{ 
    socket.close(); 
    socket.connect(*endpoint_iterator++, error); 
} 

那么消息本身是制定这样的:

boost::asio::streambuf request; 
std::ostream request_stream(&request); 
request_stream << "DESCRIBE " << "rtsp://192.168.0.42/mpeg4?multicast/ RTSP/1.0\r\nCSeq: 1\r\n"; 
boost::asio::write(socket, request); 

现在,如果我使用Wireshark发送这一点,并抓住它,它不会将其识别为RTSP消息。

那么我做错了什么?我只是在我的流中制定请求错误?或者我需要使用完全不同类型的连接?

是否有任何示例如何实现一个简单的RTSP客户端?我无法找到任何东西。 请不要建议使用像libcurl这样的其他库,我需要自己实现它。

回答

2

在DESCRIBE消息的末尾需要更多“\ r \ n”。

request_stream << "DESCRIBE " << "rtsp://192.168.0.42/mpeg4?multicast/ RTSP/1.0\r\nCSeq: 1\r\n\r\n"; 
+0

哈,哦,我的天哪,我真的只是想念一条新线...... – Toby 2012-02-10 14:42:49