2014-07-24 5 views
0

live555 (a.k.a OpenRTSP)를 사용하여 RTSP 서버 및 클라이언트를 설정하려고합니다.
스트리밍, 디코딩 및 재생으로 live555, ffmpeg 및 SDL을 사용하는 클라이언트 응용 프로그램.RTSP 서버가 다운되었을 때 SDL_CloseAudio가 교착 상태가됩니다.

  • 를 RTSP가 다운되면 :


    나는 내가 다음과 같은 상황으로 SDL_CloseAudio를 호출 할 경우 교착 상태가있을 수 있습니다 발견했다.

  • 네트워크가 고장난 경우.

나는 서버가 다운되지 않을 때 SDL_CloseAudio를 호출 할 경우 잘 작동하기 때문에 어떤 타이밍 문제와는 관련 제외입니다.

또한, 나는 API를 다음 시도했지만 여전히 작동하지 :

  • 가까이 그 전에 SDL_PauseAudio을보십시오.
  • 닫기 전에 SDL_UnlockAudio을 시도하십시오.

어떤 아이디어입니까? 나는 SDL 소스 코드를 추적 한 후

답변

0

, 내가 네트워크가 여전히 서버가 아닌 아래 작업 (또는 경우에 SDL 여전히 공정 에서 SDL_RunAudio이

또한, 것 내 상황을 따라하는 것은 잘 작동 할 때이 뮤텍스 관련이 있습니다 발견). 그래서 나는 그것을 닫기 전에 "0"으로 킬로 바이트 가짜 오디오 데이터를 보내려고합니다.

PacketQueue    m_audioq; //working queue. 

    AVPacket *pktAudio = NULL; 
    uint8_t data[1024] = {0}; 
    pktAudio = (AVPacket*)av_malloc(sizeof(AVPacket)); 
    av_init_packet(pktAudio); 
    pktAudio->data = data; 
    pktAudio->size = 1024; 
    packet_queue_put(&m_audioq, pktAudio); 

    SDL_CloseAudio();