我正在使用FFMPEG在C ++中使用实时流媒体服务器。 我有一个获取线程,它抓取来自摄像机的图像,我在每个客户端连接上生成一个新线程,向它们发送数据包。
我的"发送"功能:
void Encoder::_encode()
{
int ret = 0;
if (avcodec_send_frame(ctx, frame) < 0)
throw new std::runtime_error("error sending a frame for encoding");
while (ret >= 0)
{
ret = avcodec_receive_packet(ctx, pkt);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
return;
avio_write(client, pkt->data, pkt->size);
avio_flush(client);
av_packet_unref(pkt);
}
}
这会对帧进行编码并将其发送给客户端。
问题是:每当客户端退出时,线程会不断发送数据,并且不会抛出任何异常,即使同一客户端再次连接,它也会生成一个新线程,而旧线程继续运行... 有没有办法去&#34; ping&#34;客户端检查它是否仍然连接?