GitPedia

Media Cognition Pipeline

A general-purpose real-time streaming media and deep learning inference acceleration framework, supporting H264, H265, AAC, MP4, FLV, RTSP, RTMP, and YOLO.实时流媒体及深度学习推理加速通用处理框架,支持H264、H265、AAC、MP4、FLV、RTSP、RTMP、YOLO。

From BreakingY·Updated June 27, 2026·View on GitHub·

实时流媒体及深度学习推理加速通用处理框架,支持H264、H265、AAC、MP4、FLV、TS、RTSP、RTMP、SRT、YOLO。 * 音视频解封装(MP4、FLV、TS、RTSP、RTMP、SRT(TODO))、重采样、编解码(H264、H265、AAC;NVIDIA、晟腾)、封装(MP4、FLV、TS、RTMP、SRT),视觉感知(YOLO目标检测 + ByteTrack多目标跟踪;NVIDIA、晟腾、海光)pipeline, 采用模块化、节点化和接口化管理。 The project is written primarily in C++, distributed under the MIT License license, first published in 2024. Key topics include: aac, ascend, bytetrack, cann, codec.

English | 中文

Media-Cognition-Pipeline

实时流媒体及深度学习推理加速通用处理框架,支持H264、H265、AAC、MP4、FLV、TS、RTSP、RTMP、SRT、YOLO。

  • 音视频解封装(MP4、FLV、TS、RTSP、RTMP、SRT(TODO))、重采样、编解码(H264、H265、AAC;NVIDIA、晟腾)、封装(MP4、FLV、TS、RTMP、SRT),视觉感知(YOLO目标检测 + ByteTrack多目标跟踪;NVIDIA、晟腾、海光)pipeline, 采用模块化、节点化和接口化管理。

解封装

编解码(只能开启其中的一种)

  • 音频编解码使用纯软方案。
  • 视频编解码有以下实现:
    • FFmpeg硬编解码(FFHardDecoder.cpp、H264FFHardEncoder.cpp)
      • cmake -DFFMPEG_NVIDIA=ON ..
      • 仅支持英伟达显卡,支持软硬编解码自动切换(优先使用硬编解码-不是所有nvidia显卡都支持编解码、不支持则自动切换到软编解码,ffmpeg需要在编译安装的时候添加Nvidia硬编解码功能)。 博客地址:https://blog.csdn.net/weixin_43147845/article/details/136812735
    • FFmpeg纯软编解码(FFSoftDecoder.cpp、H264FFSoftEncoder.cpp)
      • cmake -DFFMPEG_SOFT=ON ..
      • 此时代码可以在任何Linux/Windows环境下运行,只需要安装ffmpeg即可
    • 昇腾DVPP V2版本编解码(DVPPDecoder.cpp、H264DVPPEncoder.cpp、DVPP_utils)
      • cmake -DDVPP_MPI=ON ..(先执行source /usr/local/Ascend/ascend-toolkit/set_env.sh)
      • 默认使用第0号NPU(MiedaWrapper.h-->device_id_)
      • 考虑是实时性,不支持解码B帧,如果要支持B帧,请修改DVPPDecoder.cpp-->HardVideoDecoder::Init,把chn_attr_.video_attr.ref_frame_num增大即可
    • NVIDIA x86编解码(NVIDIADecoder.cpp、H264NVIDIAEncoder.cpp、Nvcodec_utils)
      • cmake -DNVIDIA_SDK_X86=ON ..(先导入环境变量export PATH=$PATH:/usr/local/cuda/binexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64)
      • 使用NVIDIA x86原生SDK(https://developer.nvidia.com/video_codec_sdk/downloads/v11), 项目使用Video_Codec_SDK_11.0.10版本,测试驱动版本为550.163.01, Nvcodec_utils目录里的文件都是从Video_Codec_SDK_11.0.10中提取的,因为Video_Codec_SDK_11.0.10中文件很多,实际使用过程中并不是所有的都需要,Nvcodec_utils里面只提取出来本项目使用的文件,并进行分类。使用前需要设置编码方式(不是所有的显卡都支持硬编码,默认使用软编码, MiedaWrapper.h-->use_nv_enc_flag_),默认使用第0号GPU(MiedaWrapper.h-->device_id_), 需要安装cuda(版本无要求)
    • NVIDIA arm(Jetson)编解码(JetsonDecoder.cpp、H264JetsonEncoder.cpp、Jetson_utils)
      • include和common(来自/usr/src/jetson_multimedia_api/)两个文件夹在windows上打开有问题,所以以压缩包的形式传上来的,需要在linux下解压。
      • cd HardCodec/Jetson_utils
      • tar -zxvf include.tar.gz
      • tar -zxvf common.tar.gz
      • cmake -DNVIDIA_SDK_ARM=ON ..(先导入环境变量export PATH=$PATH:/usr/local/cuda/binexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64)
      • Jetpack版本: 5.0.2,Jetpack 5.x编解码是通用的,但是5.0.2编译出来的库不能直接在其他5.x版本上使用,把代码放到目标机器上重新编译即可(不需要替换jetson_multimedia_api头文件)
      • 实现参考:jetson_multimedia_api/samples/02_video_dec_cuda、jetson_multimedia_api/samples/01_video_encode
      • 考虑到Jetson一般作为边缘设备,为了降低时延,Jetson默认不支持解码B帧,解码B帧会出现画面倒退的情况,如果要支持B帧请修改Jetson_utils-->JetsonDec.cpp,注释掉JetsonDec::decode_pro中的ret = ctx.dec->disableDPB();

封装

视觉感知(YOLO + ByteTrack)

  • NVIDIA TensorRT
    • -DDETECTION_NVIDIA=ON
    • TensorRT-10.4.0.26
    • trtexec --onnx=yolo11s_best.onnx --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:4x3x640x640 --saveEngine=yolo11s_best.engine --fp16
  • Ascend CANN
    • -DDETECTION_ASCEND=ON
    • CANN7.0.0/8.2.RC1
    • atc --model=yolo11s_best.onnx --framework=5 --input_shape=images:-1,3,640,640 --dynamic_batch_size="1,2,3,4" --insert_op_conf=insert_op.cfg --output=yolo11s_best --soc_version=Ascend310P3 --precision_mode_v2=mixed_float16
  • Hygon MIGraphX
    • -DDETECTION_HYGON=ON
    • source /etc/profile.d/dtk.sh
    • source /etc/profile.d/migraphx.sh
    • source /opt/dtk/cuda/env.sh
    • dtk26.04/migraphx5.2.0
    • 动态batch(migraphx暂不支持yolo11)
      • migraphx-driver compile --onnx yolo11s_best.onnx --dyn-input-dim @images "[{min:1,max:8,optimals:[1,4,8]},3,640,640]" --binary -o yolo11s_best.mxr --fp16 --gpu
    • 静态batch
      • migraphx-driver compile --onnx yolo11s_best.onnx --input-dim @images 4 3 640 640 --binary -o yolo11s_best.mxr --fp16 --gpu
  • yolo11s_best.onnx 包含两个类别:{"dog", "person"}
  • 模型训练:https://github.com/BreakingY/yolo-onnx-tensorrt

框架搭建

  • Warpper
  • 基于解封装、编解码、封装、视觉感知模块搭建通用媒体处理及感知框架。
  • 因为mp4需要在程序结束的时候写入尾数据,对于rtsp/rtmp实时流不适用,实时流写文件推荐使用flv和ts。

说明

  • 支持格式,视频:H264/H265,音频:AAC。
  • 视觉感知:YOLO11
  • 测试版本:
    • ffmpeg 4.0.5(ffmpeg==4.x,音频使用fdk-aac编码,确保安装的ffmpeg包含fdk-aac)
    • opencv 4.5.1
    • Ascend: CANN 7.0.0/8.2.RC1
    • NVIDIA:
      • TensorRT: 10.4.0.26
      • X86: cuda 12.4; 驱动 550.163.01; Video_Codec_SDK 11.0.10
      • ARM: Jetson 5.0.2
    • Hygon DCU: DTK 26.04; migraphx 5.2.0
  • ByteTrack依赖: apt install libeigen3-dev
  • Jetson依赖:v4l2
  • librtmp依赖:openssl
  • Windows 软件安装参考:
  • 代码模块划分如下图:
    MCP

感谢以下作者(.gitmodules子模块)

编译

  • git clone --recursive https://github.com/BreakingY/Media-Cognition-Pipeline.git
  1. Linux
    • mkdir build
    • cd build
    • cmake -DFFMPEG_SOFT=ON ..
    • make -j
  2. Windows(MinGW + cmake)
    • mkdir build
    • cd build
    • cmake -G "MinGW Makefiles" -DFFMPEG_SOFT=ON ..
    • mingw32-make -j
  3. 视觉感知
    • NVIDIA: cmake -D<FFMPEG_SOFT/FFMPEG_NVIDIA/NVIDIA_SDK_X86/NVIDIA_SDK_ARM>=ON -DDETECTION_NVIDIA=ON ..
    • ASCEND: cmake -D<FFMPEG_SOFT/DVPP_MPI>=ON -DDETECTION_ASCEND=ON ..
    • Hygon : cmake -DFFMPEG_SOFT=ON -DDETECTION_HYGON=ON ..

测试:

  1. pipeline测试:
    ./MediaCodec <mp4(../Test/test*.mp4)>/<flv(../Media/RtmpClient/libflv/test/test_1280x720_h264_aac.flv)/ts(../Media/TsTransport/libmpeg2core/media/h264_aac.ts)>/<srt url>/<rtsp url>/<rtmp url> <mp4>/<flv>/<ts>/<srt url>/<rtmp url>

  2. AI推理:
    ./MediaCodec ../Test/Cognition.mp4 <mp4>/<flv>/<ts>/<srt url>/<rtmp url>

    https://github.com/user-attachments/assets/59b77cfd-b6a7-4fcd-b6ab-acec722d74e2

技术交流

Contributors

Showing top 1 contributor by commit count.

View all contributors on GitHub →

This article is auto-generated from BreakingY/Media-Cognition-Pipeline via the GitHub API.Last fetched: 6/28/2026