nvdia 编码器设置时间戳

1. driver works 的API设置时间戳

      如果使用driver works提供的接口,使用dwImage_setTimestamp设置每一帧的时间戳

dwImage_setTimestamp (dwTime_t timestamp, dwImageHandle_t image)

2. driver OS 的API设置时间戳

     Driver OS提供的接口为 NvMediaIEPFeedFrame, 不同版本输入参数有所变化,基本方式是不变的。时间戳的数据通过SEI配置参数和每一帧数据一起送入上述接口。

     起始标记 0x000000014e01; 结束标记 0x80 不用设置,NV编码器会自动设置 

     以H265为例

    //定义结构体
    typedef struct {
        unsigned int    payloadSize;
        unsigned int    payloadType;
        unsigned char   payload[1024];
    } EncodeH265SEIPayload;
    
    EncodeH265SEIPayload m_h265_sei_playload;
    
    //设置frameIndex + 空格 + 时间戳
    m_h265_sei_playload.payloadType = 5; //用户数据
    std::string frameIndxStr = std::to_string(frame->frameIndex);
    std::string timestamp = std::to_string(frame->timestampns/1000); //时间戳
    memset(m_h265_sei_playload.payload, 0, ARRAYS_ALOCATION_SIZE);
    sprintf((char*)m_h265_sei_playload.payload, "%s %s", frameIndxStr.c_str(), timestamp.c_str());

    m_h265_sei_playload.payloadSize = frameIndxStr.size() + 1 + timestamp.size();
    
    //配置参数    
    NvMediaEncodePicParamsH265 encodePicParams;

    //配置初始化
    memset(&encodePicParams, 0, sizeof(NvMediaEncodePicParamsH265));
    //IPP mode
    encodePicParams.pictureType =  NVMEDIA_ENCODE_PIC_TYPE_AUTOSELECT;
    encodePicParams.encodePicFlags = NVMEDIA_ENCODE_PIC_FLAG_OUTPUT_SPSPPS;
    encodePicParams.nextBFrames = 0;
    encodePicParams.seiPayloadArrayCnt = 1;
    m_payloadArrH265.payloadSize = m_h265_sei_playload.payloadSize;
    m_payloadArrH265.payloadType = m_h265_sei_playload.payloadType;
    m_payloadArrH265.payload = m_h265_sei_playload.payload;
    encodePicParams.seiPayloadArray = &m_payloadArrH265;
    
    //数据和时间戳配置一起送入NV编码器
    NvMediaStatus nvmStatus = NvMediaIEPFeedFrame(m_pNvMIEP.get(),    // *encoder
                                         pSciBufObj,                  // *frame
                                         &encodePicParams,            // encoder parameter
                                         NVMEDIA_ENCODER_INSTANCE_0); // encoder instance

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值