Ffmpeg 当RTSP服务器关闭时,尝试关闭SDL_CloseAudio已死锁

Ffmpeg 当RTSP服务器关闭时,尝试关闭SDL_CloseAudio已死锁,ffmpeg,sdl,live555,Ffmpeg,Sdl,Live555,我尝试使用live555a.k.a OpenRTSP来设置RTSP服务器和客户端。 我的客户端应用程序使用live555、ffmpeg和SDL作为流媒体、解码和播放 我发现如果我尝试按以下情况调用SDL_CloseAudio,可能会出现死锁: 当RTSP关闭时。 当网络断开时。 我排除它与任何时间问题有关,因为如果我尝试在服务器未关闭时调用SDL_CloseAudio,它工作得很好 此外,我尝试了以下API,但仍然不起作用: 在关闭它之前尝试SDL_PauseAudio。 请在关闭音频之前尝试S

我尝试使用live555a.k.a OpenRTSP来设置RTSP服务器和客户端。 我的客户端应用程序使用live555、ffmpeg和SDL作为流媒体、解码和播放

我发现如果我尝试按以下情况调用SDL_CloseAudio,可能会出现死锁:

当RTSP关闭时。 当网络断开时。 我排除它与任何时间问题有关,因为如果我尝试在服务器未关闭时调用SDL_CloseAudio,它工作得很好

此外,我尝试了以下API,但仍然不起作用:

在关闭它之前尝试SDL_PauseAudio。 请在关闭音频之前尝试SDL_解锁音频。
有什么想法吗?

在跟踪SDL源代码后,我发现它可能与互斥有关,而SDL仍在处理SDL\u RunAudio

此外,根据我的情况,如果网络仍然工作或服务器没有关闭,它将工作得很好。所以我尝试在关闭它之前发送一个千字节的假音频数据

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