1

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。自分で実装する必要があります。

4

1 に答える 1

3

DESCRIBE メッセージの最後にさらに「\r\n」が必要です。

request_stream << "DESCRIBE " << "rtsp://192.168.0.42/mpeg4?multicast/ RTSP/1.0\r\nCSeq: 1\r\n\r\n";
于 2012-02-10T14:41:30.793 に答える