_ _ _
| | | | ___ _ __ ___ _ _| | ___ ___
| |_| |/ _ \ '__/ __| | | | |/ _ \/ __|
| _ | __/ | | (__| |_| | | __/\__ \
|_| |_|\___|_| \___|\__,_|_|\___||___/
Hercules名字来自于是古希腊神话中的大力神,传说完成过12项“不可能完成的任务”,希望我们该项目的灵活架构可以完成更多的“不可能完成的任务”。
该项目提供一种脚本形式的控制画面布局和混音的控制方式,利用可热更新的lua脚本来完成基础接口的封装,再用json的方式灵活控制调用参数来达到想要的画面效果。
目前主要功能是混画和混音,该框架在虎牙内部,各大核心业务都在使用,颇受欢迎,基于该框架部署运行的服务节点规模达到数千个,支持的业务量每天在数万个。
- 强大的混画,混音功能,输入支持音视频,图片,文字,图片序列,gif等,输出支持本地文件,rtmp url。
- c++层封装了编解码,混画相关的基础api,lua层负责逻辑代码编写。
- 使用lua和json搭配,更方便的进行混画和混音的控制。
$ mkdir bin && cd bin
$ cmake -DCMAKE_BUILD_TYPE=Debug/Release -DADD_THIRD_PARTY="ON" path
# `ADD_THIRD_PARTY` 选项用于生成依赖的第三方库, 主要包含以下:
# - ffmpeg
# - opencv
# - freeimage
# - x264
# - fdk_aac
# - freetype
# - libjsoncpp
# - openssl
# - srs
$ make && make install # 这里会生成mixsdk.a文件和相关依赖头文件
$ cd demo
$ mkdir bin && cd bin
$ cmake # 生成mixdemo文件
demo根据不同的config产生不同的混画效果,demo使用原始视频如下
目前configs中提供了以下几种混画效果
config | 效果 | 效果图 |
---|---|---|
cut_down.json | 视频裁剪一半 | |
scale_down.json | 视频缩小一半 | |
concat.json | 视频拼接 | |
logo.json | 添加图片 | |
text.json | 添加文字 | |
property_animation.json | 基于形状位置变化的动画 | |
frame_animation.json | 基于多帧图片的动画 |
- 生成的mixsdk.a文件可以嵌入到自己的应用中。
- c++只封装了基本的编解码混画功能,逻辑在lua中实现。
- 目前只提供了简单的demo,可以通过修改输入json在lua中实现各种复杂的逻辑和效果。
- 关于混音,目前只实现了简单的混音,待完善。
- Linux
- Windows
- macOS
目前只支持 Linux。