Реализовать простой RTSP-клиент / Примеры - PullRequest
1 голос
/ 10 февраля 2012

Я просто пытаюсь реализовать действительно маленький RTSP-клиент с Boost Asio.Ему просто нужно 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 Ответ

2 голосов
/ 10 февраля 2012

Вам нужно больше «\ r \ n» в конце сообщения DESCRIBE.

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