Streaming libjrtp在流h264时丢失数据包

Streaming libjrtp在流h264时丢失数据包,streaming,rtp,packet-loss,Streaming,Rtp,Packet Loss,我有几个Axis IP摄像头,我想通过RTP将其H264输出流式传输到我的应用程序。 到目前为止,大部分时间一切正常,通常只有一个摄像头。当我连接多个cam时,我使用的每个jrtplib实例上都会出现大量丢失的数据包,从而导致糟糕的视频(工件、损坏的图像等) 因此,我创建了一个小测试设置,只连接一个摄像头,只使用一个jrtplib实例,代码或多或少直接取自示例 using namespace jrtplib; RTPUDPv4TransmissionParams transparams; RT

我有几个Axis IP摄像头,我想通过RTP将其H264输出流式传输到我的应用程序。 到目前为止,大部分时间一切正常,通常只有一个摄像头。当我连接多个cam时,我使用的每个jrtplib实例上都会出现大量丢失的数据包,从而导致糟糕的视频(工件、损坏的图像等)

因此,我创建了一个小测试设置,只连接一个摄像头,只使用一个jrtplib实例,代码或多或少直接取自示例

using namespace jrtplib;

RTPUDPv4TransmissionParams transparams;
RTPSessionParams sessparams;
RTPSession sess;

sessparams.SetOwnTimestampUnit(1.0 / 90000.0);

sessparams.SetAcceptOwnPackets(true);

transparams.SetPortbase(rtp_port);


auto status = sess.Create(sessparams, &transparams);
checkerror(status);

uint16_t last_sn = 0;

while (1)
{
    sess.BeginDataAccess();

    // check incoming packets
    if (sess.GotoFirstSourceWithData())
    {
        do
        {
            RTPPacket *pack;

            while ((pack = sess.GetNextPacket()) != NULL)
            {
                // You can examine the data here
                auto sn = pack->GetSequenceNumber();
                if (0!=last_sn && sn - last_sn != 1)
                {
                    std::cout << "\tmissing packets: " << (sn - last_sn) << std::endl;
                }

                std::cout << sn << std::endl;

                last_sn = sn;

                // we don't longer need the packet, so
                // we'll delete it
                sess.DeletePacket(pack);
            }
        } while (sess.GotoNextSourceWithData());
    }

    sess.EndDataAccess();

    status = sess.Poll();
    checkerror(status);

    Sleep(1);
}

sess.BYEDestroy(RTPTime(10, 0), 0, 0);
使用名称空间jrtplib;
RTPUDPV4传输参数传输参数;
RTPSessionParams sessparams;
RTP会话sess;
sessparams.setown时间单位(1.0/90000.0);
sessparams.SetAcceptOwnPackets(true);
transparams.SetPortbase(rtp_端口);
自动状态=sess.Create(sessparams和transparams);
检查错误(状态);
uint16\u t last\u sn=0;
而(1)
{
sess.BeginDataAccess();
//检查传入的数据包
if(sess.GotoFirstSourceWithData())
{
做
{
RTPPacket*包装;
而((pack=sess.GetNextPacket())!=NULL)
{
//你可以在这里检查数据
自动序列号=pack->GetSequenceNumber();
如果(0!=last\u sn&&sn-last\u sn!=1)
{

在进一步研究这个问题之后,我们的网络出现了问题。即使不使用libjrtp,数据包也会丢失。