乐趣区

关于图像识别:SkeyeARS-8K视频播放器软解码硬解码功能实现

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

  • 软解码:由 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 解码器 codec
avcodec_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

退出移动版