Skip to content

ksc265_in_ffmpeg

zhuzhengzz edited this page Jul 3, 2017 · 1 revision

KSC265编解码器FFMPEG集成说明


[TOC]

FFMPEG集成说明

Wrapper文件

libqy265enc.c和libqy265dec.c分别是编码器和解码器集成到FFMPEG的wrapper文件,同时也可以作为编解码器接口调用的示例代码供参考。其中的代码示例默认为服务端集成方案,移动端集成时需参考ksc265_sdk文档中的鉴权章节来更新参数传递部分。

集成方法

以下说明同时包含编码器和解码器的集成,如果只集成编码器或解码器,可以选择相应的部分。

  1. 将接口文件qy265def.h, qy265enc.h, qy265dec.h,以及wrapper文件libqy265enc.c, libqy265dec.c放到libavcodec目录
  2. 修改ffmpeg的文件libavcodec/allcodec.c添加 REGISTER_ENCDEC(LIBQY265, libqy265);
  3. 修改ffmpeg的配置,libavcodec/Makefile添加
OBJS-$(CONFIG_LIBQY265_ENCODER)           += libqy265enc.o
OBJS-$(CONFIG_LIBQY265_DECODER)           += libqy265dec.o

与libqy265enc.c和libqy265dec.c对应。

执行./configure时增加以下选项:

  • --enable-encoder=libqy265以及--enable-decoder=libqy265

  • 如果qy265def.h, qy265enc.h, qy265dec.h没有放置在libavcodec目录,增加--extra-cflags='-Ixxxdir ',xxxdir为对应目录

  • --extra-ldflags='-Lxxxlibs', xxxlibs为编解码库所在目录

  • --extra-libs="-lqy265 -lstdc++", libqy265.a是编解码打包在一起的库,此外目前编解码器还用到c++标准库。对于单独链接编码器或解码器,在不同平台上有差异。

  • linux: 编码库libqyencoder.a, 解码库libqydecoder.a,c++标准库-lstdc++

  • android: 编码库libqyencoder.a, 解码库libqydecoder.a,c++标准库gnustl_static。Android还需要链接cpufeatures,链接顺序示例: -lqydecoder -lcpufeatures -llog -lgnustl_static

  • ios: 编码库libqyencoder.a + libqycommon.a,解码库libqydecoder.a + libqycommon.a。libqycommon.a是编码器和解码器的公用库。链接顺序示例: -lqycommon -lqydecoder -lc++

对于服务端转码还需要定 -DKSAUTH_PRIVATE_AUTH=1 或者将在qyauth_env.h中将 KSAUTH_PRIVATE_AUTH 的默认值改为1

FFMPEG命令行

ffmpeg解码

./ffmpeg -qydec_threads [number] -vcodec libqy265dec -qylf ./qy265.key -i [name].[hevc|mp4] -pix_fmt yuv420p -f rawvideo -y /dev/null
配置 是否必配 取值 说明
-qydec_threads int 线程数, 设为0则等于CPU核数, 默认值0
-vcodec libqy265dec 采用qy265解码器
-qylf * string 其后接本地密钥key文件,对于需要鉴权的转码服务这个参数必配
-i string 输入265视频文件名称
-pix_fmt yuv420p 解码器仅支持YUV420格式
-f rawvideo 解码器仅支持rawvideo输出
-y string 输出解码YUV文件名

服务端转码: ./ffmpeg -i [name] -c:v libqy265 -qylf ./qy265.key -qy265-params [name0=value0,name1=value1...] -y [name]

示例: ./ffmpeg -i test.mp4 -c:v libqy265 -qylf ./qy265.key -qy265-params rcType=1:threads=4 -y out.mp4

恒定质量模式编码:

./ffmpeg -i [name] [params] -vcodec libqy265 -r [frnum] -pix_fmt yuv420p -preset [superfast|veryfast|fast|medium|slow|veryslow|placebo] -latency [zerolatency|livestreaming|offline] -qy265-params rctype=3:crf=[crfnum]:threads=[thrnum]:iper=[ipernum]:qpmin=[qminnum] :qpmax=[qmaxnum]:fr=[frnum]:bframes=[bfnum]:wpp=[0|1]:fpp=[0|1]:psnr=[0|1|2]:temporalLayer=[0|1]:VbvMaxRate=[vbvrate]:VbvBufsize=[vbvsize] -y [output]

恒定码率模式编码:

./ffmpeg -i [name] [params] -vcodec libqy265 -r [frnum] -pix_fmt yuv420p -preset [superfast|veryfast|fast|medium|slow|veryslow] -latency [zerolatency|livestreaming|offline] -qy265-params rctype=[1|2]:br=[btrnum]:threads=[thrnum]:iper=[ipernum]:qpmin=[qminnum]:qpmax=[qmaxnum]:fr=[frnum]:bframes=[bfnum]:wpp=[0|1]:fpp=[0|1]:psnr=[0|1|2]:temporalLayer=[0|1]:VbvMaxRate=[vbvrate]:VbvBufsize=[vbvsize] -y [output]
配置 是否必配 取值 说明
params string 该参数段为一般使用的ffmpeg参数,例如-f mp4 -an等等
-vcodec libqy265 采用qy265编码器
-pix_fmt yuv420p 编码器仅支持YUV420格式
-preset string (superfast, veryfast, fast, medium, slow,veryslow) 设置编码速度档次,默认值veryfast
-tune default, selfshow, game, movie, screen 应用场景, 默认值default, 其他暂无作用
-latency zerolatency, lowdelay, livestreaming, offline 延迟档次, 默认offline
-qy265-params string 其后接ksc265编码器参数配置,不同参数之间使用“:”分隔
-qylf * string 其后接本地密钥key文件,对于需要鉴权的转码服务这个参数必配
rctype 0~3 配置rc模式类型,0为qp模式,1为cbr模式,2为abr模式,3为crf模式,默认值为1
crf 0~51 设置恒定质量模式(rctype=3)下的编码质量等级,取值0~51,默认为30
qp 0~51 如果rc=0, 必须设置qp, 默认值为30
qpmin 0~51 码率控制过程中, 帧级最小使用的QP. 如果rc=1或2, 可设置qpmin
qpmax 0~51 码率控制过程中, 帧级最大使用的QP. 如果rc=1或2, 可设置qpmax
br int 如果rc为cbr或abr, 必须设置比特率, 单位为kbps, 默认值为500
VbvBufSize int 如果rc为cbr或abr, 可配置vbv缓冲区大小, 单位为kbits
VbvMaxRate int 如果rc为cbr或abr, 可配置vbv缓冲区编码最大码率, 单位为kbps
psnr 0,1,2 0: disable计算psnr; 1: 计算并输出最终psnr;2: 输出每帧psnr. 默认值为0
iper int 关键帧间隔, 单位为帧数, 默认256
temporalLayer int 是否使用时间分级, 在QY265LATENCY_ZERO和QY265LATENCY_LOWDELAY两个延迟档次使用. 0:关闭, 1:打开. 默认值为0
threads int 线程数, 设为0则等于CPU核数, 默认值0
bframes int 相邻两个前向参考图像间最大使用的B帧数目. 不配置或值为-1时, 表示使用默认值7. 目前支持0,1,3,7.
wpp 0, 1 是否使能wpp并行, 默认值1
fpp 0, 1 是否使能帧级并行, 默认值1
fr double 帧率
-y string 输出编码结果文件名