首先,咱们简略理解一下软解码&硬解码:

  • 软解码:由CPU负责解码进行播放
长处:不受视频格式限度、画质可能略好于硬解毛病:会占用过高的资源、对于高清视频可能没有硬解码晦涩(次要看CPU的能力)。就好比两个人一样,一个人有一个袋子,一个人只能用手,在拿货色的时候有袋子的必定会省力一些,然而在个别情况下袋子不不便装的话可能须要手间接拿着。
  • 硬解码:由应用非CPU进行解码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等来对高清视频进行解码工作,CPU占用率很低,画质成果比软解码略差一点,须要对播放器进行设置。
长处:播放晦涩、低功耗毛病:受视频格式限度、功耗大、画质可能没有软解码好

SKeyePlayerPro 间接反对软解和硬解。

只需开启视频流的时候传入不同参数即可,具体为 decodeType 参数:

LIB_EASYPLAYER_PRO_API int LIB_APICALL    libEasyPlayerPro_StartPlayStream(PLAYER_HANDLE handle, int channelId, HWND hWnd,         EASYPRO_RENDER_FORMAT renderFormat, unsigned char decodeType=0/*0:软解 1:硬解*/);

因而,如果咱们须要软解,则需传入 0,反之传入 1 即可。

对于软解,应用 FFmpeg 如下函数即可:

//创立ffmpeg codec,在ffmpeg中是依据codecid(aac,h264等注册的id)寻找适合的decoder,返回AVCodec对象avcodec_find_decoder() /*这函数创立decode的context,返回的codecContext蕴含解码器所须要的各种配置信息,比方  对于aac decode,context能够用来设置sample_rate,channels,profile等  对于h264 decode,context能够用来设置width,height等*/avcodec_alloc_context3() //用曾经配置好的decoder的context,来configure解码器codecavcodec_open2() //初始化一个pkt用于接管待解码的数据,用demux输入的数据,填充pkt的data,设置pkt的flag(是否蕴含key frame等)av_init_packet(AVPacket *pkt)() //将填充斥的pkt,发送给解码器avcodec_send_packet() //从解码器接管decode后的数据,填充到AVFrame中。avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)

而硬解,则须要借助 Nvidia:

//创立source,主要参数是设置视频文件门路和回调函数。source会去解析指定视频文件,并通过回调函数实现对视频数据的自定义解决。cuvidCreateVideoSource()//用来向parser塞数据,通过一直地塞h.264数据,parser会通过回调接口对解析进去的数据进行解决。cuvidParseVideoData()//该接口是用来创立decoder,通过设置一些解码参数,会返回一个decoder的句柄。这个句柄会在之后的解码接口中被应用。cuvidCreateDecoder()//该接口就是向解码器传递待解码的数据。须要阐明一下,该接口是异步解码,不能通过该接口失去解码后的视频数据,它只是向解码器传数据而已。cuvidDecodePicture()

Nvidia 解码须要应用 cudanvcuvid 两个库,应用的时候要加载它们,并应用其中一些接口。

对于SkeyeARS

SkeyeARS全景AR加强监视系统, 是视开科技开发的一款基于宽场景多路视频无缝拼接、视频实时加强、监督指标加强显示、指标主动跟踪、视频存储回放、近程数据传输和多通道全景视频同步显示等性能的综合视频AR加强监视系统,广泛应用于智慧交通、智慧城市、智慧机场等大场景智能监控畛域。

具体阐明:http://www.openskeye.cn/web/product/ars