实现一个简单的RTSP客户端/示例

时间:2012-02-10 14:35:45

标签: c++ boost boost-asio rtsp rtsp-client

我只是想用Boost Asio实现一个非常小的RTSP客户端。它只需要SETUP服务器然后调度PLAY命令,然后稍后请求TEARDOWN

让我感到困扰的是实施本身。 对于连接本身,我就像我想要一个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之类的任何其他库,我需要自己实现它。

1 个答案:

答案 0 :(得分:2)

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

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