如何检查客户端是否仍与ffmpeg连接

时间:2017-12-11 08:35:00

标签: c++ multithreading ffmpeg client-server live-streaming

我正在使用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;客户端检查它是否仍然连接?

0 个答案:

没有答案