Опитайте се да затворите SDL_CloseAudio има блокиране, когато RTSP сървърът не работи

Опитвам се да използвам live555 (a.k.a OpenRTSP), за да настроя RTSP сървър и клиент.
Моето клиентско приложение, използващо live555, ffmpeg и SDL като стрийминг, декодиране и възпроизвеждане.

Открих, че може да има блокиране, ако се опитам да извикам SDL_CloseAudio при следната ситуация:

  • Когато RTSP не работи.
  • Когато мрежата е повредена.

Изключвам това, свързано с някакъв проблем с времето, защото работи добре, ако се опитам да извикам SDL_CloseAudio, когато сървърът не е изключен.

Освен това опитах следния API, но все още не работи:

  • Опитайте SDL_PauseAudio, преди да го затворите.
  • Опитайте SDL_UnlockAudio, преди да го затворите.

Някаква идея за това?


person Evan Lin    schedule 24.07.2014    source източник


Отговори (1)


След като проследих изходния код на SDL, открих, че може да е свързан с mutex, когато 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();
person Evan Lin    schedule 24.07.2014