2012-02-10 5 views
1

저는 Boost Asio로 정말 작은 RTSP 클라이언트를 구현하려고합니다. SETUP 서버에 PLAY 명령을 전달한 다음 나중에 어느 시점에 TEARDOWN을 요청하면됩니다.간단한 RTSP 클라이언트 구현/예제

구현 자체가 무슨 문제입니까? 내가 Wireshark와 함께이를 보내고 잡으면 지금

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); 

, 그것을 : 연결 자체가 내가 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); 
} 

그런 메시지 자체는 다음과 같이 공식화를 원하는 것처럼 내가 그것을 위해 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