2013-10-02 4 views
0

비디오 파일에서 wowza 미디어 서버로로드되는 스트림을 게시하는 Red5 클라이언트 구현이 있습니다. 문제는 스트림 이름이 크면 (대략 90 개 이상의 기호) 클라이언트가 게시하지 않고 자동으로 실패합니다. 클라이언트로부터 기대되는 다른 모든 작업은 완료됩니다. 즉, 서버에 연결되어 스트림을 생성합니다. 그러나 스트림을 게시하지 않습니다. 나는 해당 RTMP 메시지를 보지 않으며 나는 wowza의 로그에서 결과 반응을 보지 못한다.red5 스트림 이름이 충분히 크면 RTMPClient가 스트림을 게시하지 않습니다.

클라이언트 디버깅을 시도하고 SocketChannel에 쓰기 시작할 때까지 실행을 추적했습니다. 짧은 이름의 스트림 (ok를 게시 함)을 실행하는 경우와 RTMP 명령 "게시"가 전송되지 않는 긴 이름으로 스트림하는 경우 모두 동일합니다.

질문은 다음과 같습니다

  1. 뭐죠?

  2. 예외가 발생하지 않고 SocketChannel에 일부 바이트를 쓰는 경우 - 해당 메시지가 전송되었음을 보장합니까?

  3. 예외가 발생하지 않고 SocketChannel에 일부 바이트를 작성한 경우 - 내 OS (내 경우 MACOS)의 수단으로 바이트를 실제로 기록했는지 여부를 확인할 수 있습니까? WireShark를 통해이 데이터 조각이 전송 된 적이 없다는 것을 알고 있습니다. 도움이되지 않는 작은 일을 보내 "큰"패킷을 보낸 후 - 더 이상하다

UPDATE ... 그리고. 더 큰 길이의 패킷이 소켓에 제출 된 후에는 패킷을 보낼 수 없습니다.

답변

0

예외가 발생하지 않고 SocketChannel에 일부 바이트를 작성한 경우 해당 메시지가 전송되었음을 보장합니까?

데이터가 write()에 의해 반환 된 개수까지 소켓 송신 버퍼에 로컬로 버퍼됨을 보장합니다. 아무것도 더.

더 이상 데이터를 보낼 수 없으므로 수신자가 대용량 데이터를 읽지 않는 것처럼 들립니다. 예외가있어 실패 할 가능성이 있으며 독서를 중단해야합니까?

+0

EJP, Wireshark는 내가 SocketChannel에 작성한 RTMP 패킷을 보낸 적이 없다고 전합니다. 클라이언트 측 문제 인 것처럼 보입니다. 일부 OS 버퍼 오버 플로우가있을 수 있습니까? .. – KutaBeach

+0

또는 클라이언트가 패킷을 보낼 수는 없지만 패킷을 보내고 서버 _ 측에서 실패하여 Wireshark가 통계를 표시하지 못하게 할 수 있습니다. – KutaBeach