NVIDIA视频编解码

打印 上一主题 下一主题

主题 845|帖子 845|积分 2535

开源了两个项目:英伟达显卡视频编解码、jetson视频编解码。都是基于官方SDK进行的封装,由于官方自带的demo晦涩难明并且每块都是独立的,我对SDK进行二次封装并形成了一套较为完整的视频编解码流程,调用简朴,有完整的测试步调,想学习SDK或者想直接使用的可以看过来。
1、NVIDIA视频编解码
项目基于英伟达 Video_Codec_SDK_11.0.10 API实现了视频硬解码、渲染、软/硬编码、生存为MP4



  • 解码:使用Video_Codec_SDK_11.0.10解码API对视频进行解码,支持H264、H265。
  • 渲染:使用opencv对图像进行渲染,涉及到了基础的cuda开发(不外都是比力简朴的,没有什么难度)。
  • 编码:支持软硬编码切换,硬编码使用Video_Codec_SDK_11.0.10 API,软编码使用ffmpeg API,视频编码格式为H264,如需H265可自行修改(NvCodecRender::EncInit()/NvCodecRender.cpp)。基本nvidia的全部显卡都支持视频解码、但不是全部显卡都支持编码、以是这里实现了软硬编码切换功能。
  • MP4:编码后的视频写入到MP4文件中,这里使用了老陈的libmov库,项目所在https://github.com/ireader/media-server。感谢老陈,media-server是一个优秀的开源项目,保举搞流媒体开发的朋友都可以看看,基本涵盖了流媒体开发的常用协议。
下面是项目的测试步调:
  1. #include "NvCodecRender.h"
  2. #include <chrono>
  3. #include <thread>
  4. int main(int argc, char **argv)
  5. {
  6.     if (argc < 5) {
  7.         printf("./demo input output gpu_idx use_nvenc(0  -not use 1- use)\n");
  8.         return -1;
  9.     }
  10.     ck(cuInit(0));
  11.     NvCodecRender *test = new NvCodecRender(argv[1], argv[2], atoi(argv[3]), atoi(argv[4]) == 1 ? true : false);
  12.     auto start_time = std::chrono::high_resolution_clock::now();
  13.     test->Render();
  14.     delete test;
  15.     auto end_time = std::chrono::high_resolution_clock::now();
  16.     auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time);
  17.     std::cout << "耗时: " << duration.count() << " 毫秒" << std::endl;
  18.     return 0;
  19. }
复制代码
NVIDIA视频编解码项目所在:GitHub - BreakingY/Nvidia-Video-Codec: Nvidia video hard decoding, rendering, soft/hard encoding, and writing to MP4 file ; Nvidia视频硬解码、渲染、软/硬编码并写入MP4文件
2、JETSON视频编解码
NVIDIA针对自家嵌入式设备jetson的视频编解码又单独实现了一套SDK,我针对这个SDK封装了一个视频编解码库,包罗解码和编码库,支持Jetpack 5.x
jetson_dec_5.0.2



  • 基于Jetpack 5.0.2 jetson_multimedia_api 的视频解码库,支持解码H264、H265,实现过程参考jetson_multimedia_api/samples/02_video_dec_cuda
  • 测试步调完善,支持h264裸流、mp4测试文件,h264裸流测试必要修改一下test/video_decode_main.cpp,修改if else分支即可、支持压力测试,可测试jetson解码性能
  • 输入:H264/H265 解码器输出:NV12
  • 生成动态库libJetsonDec.so,头文件 + libJetsonDec.so 即可作为第三方库使用
jetson_enc_5.0.2



  • 基于Jetpack 5.0.2 jetson_multimedia_api 的视频编码库,实现过程参考jetson_multimedia_api/samples/01_video_encode
  • 输入:YUV420P,编码器输出:H264。
  • 如需H265可自行修改(JetsonEnc::encode_proc函数/JetsonEnc.cpp),照旧比力简朴的
  • 生成动态库libJetsonEnc.so,头文件 + libJetsonEnc.so 即可作为第三方库使用
项目所在:GitHub - BreakingY/jetpack-dec-enc: Jetson Video Encoding and Decoding ; Jetson Jetpack5.x视频编解码库

  1. var code = "803dc3f0-cc50-41cd-a048-d6b1471cc4cb"
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表