我尝试使用 live555(a.k.a OpenRTSP)来设置 RTSP 服务器和客户端。
我的客户端应用程序使用 live555、ffmpeg 和 SDL 作为流媒体、解码和播放。
如果我尝试在以下情况下调用 SDL_CloseAudio,我发现它可能会出现死锁:
我将它与任何时间问题排除在外,因为如果我在服务器未关闭时尝试调用 SDL_CloseAudio,它会很好地工作。
另外,我尝试了以下 API,但仍然无法正常工作:
有什么想法吗?
最佳答案
在我跟踪 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/