介绍
openh264是一个开源的H.264编解码器项目,由思科系统公司(Cisco Systems)维护并贡献给开源社区。它是基于H.264/AVC(Advanced Video Coding)标准的,该标准广泛应用于视频压缩和传输领域。
openh264项目的目标是提供一个高质量、高性能的H.264编解码器实现,同时保持对标准的兼容性。它采用了优化的算法和实现技术,以提供高效的编码和解码性能。该项目还支持多种平台和操作系统,包括Windows、Linux、macOS、Android和iOS等。
openh264的特点:
帧率、SVC、LTR在openh264上都有实现,这几个特点在x264都没有实现,但考虑主要为RTC打造,编码质量较差,码控能力较差。
源码中 README关于 openh264 的特点介绍 如下。
Encoder Features
----------------
- Constrained Baseline Profile up to Level 5.2 (Max frame size is 36864 macro-blocks)
- Arbitrary resolution, not constrained to multiples of 16x16
- Rate control with adaptive quantization, or constant quantization
- Slice options: 1 slice per frame, N slices per frame, N macroblocks per slice, or N bytes per slice
- Multiple threads automatically used for multiple slices
- Temporal scalability up to 4 layers in a dyadic hierarchy
- Simulcast AVC up to 4 resolutions from a single input
- Spatial simulcast up to 4 resolutions from a single input
- Long Term Reference (LTR) frames
- Memory Management Control Operation (MMCO)
- Reference picture list modification
- Single reference frame for inter prediction
- Multiple reference frames when using LTR and/or 3-4 temporal layers
- Periodic and on-demand Instantaneous Decoder Refresh (IDR) frame insertion
- Dynamic changes to bit rate, frame rate, and resolution
- Annex B byte stream output
- YUV 4:2:0 planar input
Decoder Features
----------------
- Constrained Baseline Profile up to Level 5.2 (Max frame size is 36864 macro-blocks)
- Arbitrary resolution, not constrained to multiples of 16x16
- Single thread for all slices
- Long Term Reference (LTR) frames
- Memory Management Control Operation (MMCO)
- Reference picture list modification
- Multiple reference frames when specified in Sequence Parameter Set (SPS)
- Annex B byte stream input
- YUV 4:2:0 planar output
OpenH264的接口包括:
WelsCreateDecoder:通过这个接口可以获取解码器对象。
WelsCreateSVCEncoder:通过这个接口可以获取编码器对象。
WelsDestroyDecoder:当解码器对象不再使用时,调用这个接口来释放资源。
WelsDestroySVCEncoder:当编码器对象不再使用时,调用这个接口来释放资源。
WelsGetCodecVersion:通过这个接口可以获取OpenH264编解码器的版本信息。
WelsGetCodecVersionEx:通过这个接口可以获取OpenH264编解码器的详细版本信息。
在调用这些接口时,需要使用C++对象指针来访问对象的方法。对象的头文件在源码的codec\api\svc目录下的codec_api.h。
网址:
https://github.com/cisco/openh264
编译过程
源码下载:
git命令行下载 git clone git@github.com:cisco/openh264.git
。源码里的README.md
有详细的各个平台的编译介绍。
编译环境搭建:
在README.md里介绍windows平台推荐使用Cygwin编译工具,小编使用了已搭建的MinGW编译工具来完成编译过程。
使用MinGW编译:
双击MinGW安装目录下msys/1.0/msys.bat,在弹出的窗口 cd
到openh264源码位置,直接make
即可生成h264dec.exe
、h264enc.exe
两个编解码可执行文件和对应的库文件。
验证:
输入./h264enc.exe
之后弹出命令参数使用说明,即代表编译成功,可进行下一步使用。
sln工程的生成
openh264提供了生成sln工程的方法,进入codec/build/win32/enc/目录下,利用vs2022直接打开,点击运行,在testbin目录里生成WelsEncoder.exe。
在testbin目录里编辑welsenc.cfg文件,改动对应的InputFile
、OutputFile
到本地位置,根据个人测试需求改动对应的编码参数即可,
备注
- openh264解码编译过程类似编码过程。
- Cygwin编译工具的配置参考网上资料。
- 关于 Mac、Linux 平台下的编译过程可以根据 README 进行实验。
关于思科
思科(Cisco)
是全球领先的网络解决方案供应商,其名字取自San Francisco(旧金山),那里有座闻名于世界的金门大桥。
思科依靠自身的技术和对网络经济模式的深刻理解,成为了网络应用的成功实践者之一。与此同时,思科正在致力于为无数的企业构筑网络间畅通无阻的“桥梁”,并用自己敏锐的洞察力、丰富的行业经验、先进的技术,帮助企业把网络应用转化为战略性的资产,充分挖掘网络的能量,获得竞争的优势。
详细介绍可以参考其网址:https://www.cisco.com/