Попробуйте закрыть SDL_CloseAudio имеет взаимоблокировку, когда сервер RTSP не работает

Я пытаюсь использовать live555 (также известный как 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, я обнаружил, что он может быть связан с мьютексом, когда 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