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

标签 ffmpeg sdl live555

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

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

  • 当 RTSP 关闭时。
  • 当网络坏了。

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

    另外,我尝试了以下 API,但仍然无法正常工作:
  • 在关闭之前尝试 SDL_PauseAudio。
  • 在关闭之前尝试 SDL_UnlockAudio。

  • 有什么想法吗?

    最佳答案

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

    关于ffmpeg - 当 RTSP 服务器关闭时,尝试关闭 SDL_CloseAudio 已死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24926019/

    相关文章:

    ffmpeg 转换突然停止

    shell - 从 Homebrew 软件安装后无法让 ffmpeg 工作

    c++ - 从live555入手,集成LIBMAD解码器

    c++ - 从 IP 摄像机流式传输在 VLC 上非常紧张

    c++ - 如何编写 Live555 FramedSource 以允许我直播 H.264

    python - python脚本中的os.system错误

    c# - 使用 ffmpeg、node.js 和 socket.io 将 Flv 流式传输到套接字

    c++ - SDL 库 PNG 支持

    c++ - SDL 在 OSX lion 上与终端/g++ 链接错误

    go - OpenGL 和 SDL2 无法打开窗口