-
Notifications
You must be signed in to change notification settings - Fork 73
ksc265_in_ffmpeg
[TOC]
libqy265enc.c和libqy265dec.c分别是编码器和解码器集成到FFMPEG的wrapper文件,同时也可以作为编解码器接口调用的示例代码供参考。其中的代码示例默认为服务端集成方案,移动端集成时需参考ksc265_sdk文档中的鉴权章节来更新参数传递部分。
以下说明同时包含编码器和解码器的集成,如果只集成编码器或解码器,可以选择相应的部分。
- 将接口文件qy265def.h, qy265enc.h, qy265dec.h,以及wrapper文件libqy265enc.c, libqy265dec.c放到libavcodec目录
- 修改ffmpeg的文件libavcodec/allcodec.c添加
REGISTER_ENCDEC(LIBQY265, libqy265);
- 修改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 -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 | 输出编码结果文件名 |