package com.persagy.nvr; import com.persagy.cameractl.common.VideoExportProcessContext; import com.persagy.nvr.VskClient.VideoNoViskHeadFrameInfo; import com.sun.jna.Pointer; import com.sun.jna.Structure; import lombok.extern.slf4j.Slf4j; @Slf4j public class VideoNoViskHeadFrameCallBackClass implements VskClient.VideoNoViskHeadFrameCallBack { @Override public void Callback(Pointer pFrameBuf, int nFrameLen, Pointer pStream, Pointer pUser) { try { if (pFrameBuf == null || pStream == null) { log.info("自定义回调没数据"); return; } VideoNoViskHeadFrameInfo videoNoViskHeadFrameInfo = Structure.newInstance( VideoNoViskHeadFrameInfo.class, pStream); videoNoViskHeadFrameInfo.read(); int encodeType = videoNoViskHeadFrameInfo.nEncodeType.intValue(); if (encodeType != 26) { log.warn("非h264编码,当前编码类型枚举值为:" + encodeType); } VideoExportProcessContext.getCurrentContext().write(pFrameBuf.getByteArray(0, nFrameLen)); } catch (Exception e) { log.error("自定义回调执行异常", e); } } } // 编码类型 // E_PT_MPEG2TS = 1, // MPEG-2 Transport Stream // E_PT_QCELP = 2,// QCELP audio // E_PT_AMR = 3,// AMR audio (narrowband) // E_PT_AMR_WB = 4,// AMR audio (wideband) // E_PT_MPEGAUDIO = 5,// MPEG-1 or 2 audio // E_PT_MP4AUDIO = 6,// MPEG-4 LATM audio // E_PT_PCM8 = 7,// PCM u-law audio // E_PT_AC3 = 8,// AC3 audio // E_PT_MPEG4V_ES = 9,// MPEG-4 ES // E_PT_MPVIDEO = 10,// MPEG-1 or 2 video // // E_PT_PCMA = 14, // VSK_G711A // E_PT_PCMU = 22, // VSK_G711U // // E_PT_H261 = 24,// H.261 // E_PT_H263 = 25,// H.263 // E_PT_H264 = 26,// H.264 视频帧类型 // E_PT_MJPEG = 27,// motion JPEG // // E_PT_G726_16 = 28,// G.726, 16 kbps // E_PT_G726_24 = 29,// G.726, 24 kbps // E_PT_G726_32 = 30,// G.726, 32 kbps // E_PT_G726_40 = 31,// G.726, 40 kbps // E_PT_H265 = 35,// H.265 视频帧类型