0

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

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

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

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

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

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

有什么想法吗?

4

1 回答 1

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();
于 2014-07-24T05:49:20.083 回答