【问题标题】:Try to close SDL_CloseAudio has deadlock when RTSP server is down当 RTSP 服务器关闭时,尝试关闭 SDL_CloseAudio 已死锁
【发布时间】:2014-09-15 13:18:25
【问题描述】:

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

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

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

我排除它与任何时间问题有关,因为如果我在服务器未关闭时尝试调用 SDL_CloseAudio,它会很好地工作。

另外,我尝试了以下 API,但仍然无法正常工作:

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

对此有什么想法吗?

【问题讨论】:

    标签: ffmpeg sdl live555


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      相关资源
      最近更新 更多