Реализация простого RTSP-клиента / Примеры
Я просто пытаюсь реализовать действительно маленький 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 ответ
Вам нужно больше "\r\n" в конце сообщения DESCRIBE.
request_stream << "DESCRIBE " << "rtsp://192.168.0.42/mpeg4?multicast/ RTSP/1.0\r\nCSeq: 1\r\n\r\n";