Skip to content

音视频(H264/H265/AAC)封装、解封装、编解码pipeline,支持NVIDIA、昇腾DVPP硬编解码

License

Notifications You must be signed in to change notification settings

BreakingY/Media-Codec-Pipeline

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Media-Codec-Pipeline

音视频封装、解封装、编解码pipeline

  • 音视频解封装(MP4、RTSP)、重采样、编解码、封装(MP4),采用模块化和接口化管理。

  • 音频编解码使用纯软方案。

  • 视频编解码有三种实现:

    1. FFmpeg硬编解码(HardDecoder.cpp、H264HardEncoder.cpp),仅支持英伟达显卡,CMakeLists.txt中打开add_definitions(-DUSE_FFMPEG_NVIDIA)。支持软硬编解码自动切换(优先使用硬编解码-不是所有nvidia显卡都支持编解码、不支持则自动切换到软编解码,ffmpeg需要在编译安装的时候添加Nvidia硬编解码功能)。 博客地址:https://blog.csdn.net/weixin_43147845/article/details/136812735
    2. FFmpeg纯软编解码(SoftDecoder.cpp、H264SoftEncoder.cpp),CMakeLists.txt中打开add_definitions(-DUSE_FFMPEG_SOFT),此时代码可以在任何Linux环境下运行。
    3. 昇腾显卡DVPP V2版本编解码(DVPPDecoder.cpp、H264DVPPEncoder.cpp、dvpp_enc),CMakeLists.txt中打开昇腾相关的配置。
  • 默认是USE_FFMPEG_SOFT,通过设置宏的方式,使用者可以添加适配任意显卡的代码,只要保证类名和被调用的类方法一致即可,平台扩展性好。

  • 支持格式,视频:H264/H265,音频:AAC。

  • ffmpeg-nvidia不适用jetson,jetson的编解码库和x86不一样。jetson编解码参考:https://github.com/BreakingY/jetpack-dec-enc

  • 昇腾的DVPP有两个版本:V1和V2 ,V1和V2适用不同的平台,请到官网自行查阅,不过昇腾后续的显卡应该都支持V2版本。DVPP视频输入的宽必须是16的整数倍,高必须是2的整数倍,并且DVPP不是所有格式的视频都支持。

  • 支持从MP4、RTSP获取音视频。MP4解封装由FFMPEG完成;RTSP客户端纯C++实现,不依赖任何库,地址:https://github.com/BreakingY/simple-rtsp-client

  • 代码包含四个模块,如下图所示:

    未命名绘图

  • Warpper实现了对四个模块的组合,如下图所示: 媒体流程

  • 采用模块化和接口化的管理方式,可自行组装扩展形成业务pipeline,比如添加视频处理模块、音频处理模块,对解码后的音视频进行处理,例如,AI检测、语音识别等。

  • 日志使用的spdlog,地址:https://github.com/gabime/spdlog

  • Bitstream:https://github.com/ireader/avcodec

准备

  • 安装ffmpeg到/usr/local下,版本>=4.x 如果没有安装在/usr/local下面请修改CMakeLists.txt,把头文件和库路径添加进去。
  • 安装opencv,需要cmake能找到,如果不能请修改CMakeLists.txt,手动指定opencv头文件、库路径及链接的库。
  • 昇腾测试时,根据SDK的实际安装路径更改CMakeLists.txt中的配置
  • 测试版本 ffmpeg4.0.5、opencv4.5.1、CANN7.0.0(昇腾SDK)。

Linux编译

  • mkdir build
  • cmake ..
  • make -j
  • 测试:
    1. 文件测试:./MediaCodec ../Test/test1.mp4 out.mp4 && ./MediaCodec ../Test/test2.mp4 out.mp4
    2. rtsp测试:./MediaCodec your_rtsp_url out.mp4
    3. 昇腾测试:./MediaCodec ../Test/dvpp_venc.mp4 out.mp4

TODO

  • 解除DVPP视频宽高的限制

技术交流

About

音视频(H264/H265/AAC)封装、解封装、编解码pipeline,支持NVIDIA、昇腾DVPP硬编解码

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published