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

时间:2014-07-24 05:49:20

标签: ffmpeg sdl live555

我尝试使用live555(a.k.a OpenRTSP)来设置RTSP服务器和客户端。
我的客户端应用程序使用live555,ffmpeg和SDL作为流,解码和回放。

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

  • 当RTSP关闭时。
  • 当网络中断时。

我将其排除在任何计时问题之外,因为如果我在服务器未关闭时尝试调用 SDL_CloseAudio ,它的效果会很好。

另外,我尝试过以下API,但仍无效:

  • 在关闭之前尝试 SDL_PauseAudio
  • 在关闭之前尝试 SDL_UnlockAudio

对此有何想法?

1 个答案:

答案 0 :(得分:0)

在跟踪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();