当前位置: 首页 > article >正文

SRS transcode支持 h264_nvenc 硬件解码方案

文章目录

  • SRS transcode支持 h264_nvenc 硬件解码方案
    • 1、修改文件
    • 2、重新编译
    • 3、使用

SRS transcode支持 h264_nvenc 硬件解码方案

SRS 是开源的流媒体服务,但在使用 GPU 服务器时,想要通过硬件加速,目前官方是不支持的,所以简单修改了源码,重新编译实现,以 SRS6.0release 为例,操作如下:

1、修改文件

  • 编辑文件

    #进入 SRS 核心目录
    cd srs/trunkvim /src/app/srs_app_ffmpeg.cpp
    
  • 定义变量
    找到 39 行附近,新增一行内容(注意:行首“#”也需要带上):

    #define SRS_RTMP_ENCODER_VCODEC_H264NVENC "h264_nvenc"
    

    在这里插入图片描述

  • 执行修改
    找到 129 行位置附近,内容为:

    if (vcodec != SRS_RTMP_ENCODER_VCODEC_LIBX264 && vcodec != SRS_RTMP_ENCODER_VCODEC_LIBX265 && vcodec != SRS_RTMP_ENCODER_VCODEC_H264QSV) {
    

    注释、删掉、或改造为如下内容:

    if (vcodec != SRS_RTMP_ENCODER_VCODEC_LIBX264 && vcodec != SRS_RTMP_ENCODER_VCODEC_LIBX265 && vcodec != SRS_RTMP_ENCODER_VCODEC_H264QSV && vcodec != SRS_RTMP_ENCODER_VCODEC_H264NVENC) {
    

    在这里插入图片描述

    保存并退出。

2、重新编译

重新编译安装即可:

cd srs/trunk#开启gb28181和ffmpeg配置
./configure --gb28181=on --ffmpeg-tool=on make && make install

编译安装完成后,重启 SRS 服务或第三步配置改完后重启服务。

3、使用

  • 安装 ffmpeg 关键点
    一般使用自己安装的 ffmpeg,需要启用硬件加速配置 --enable-nvenc 如下图:
    在这里插入图片描述
  • srs.conf 解码配置:
cd srs/trunkvim conf/srs.conf

vhost defaultVhost { 内增加解码配置:

    #转码transcode {enabled     on;#ffmpeg      /data/software/srs/trunk/objs/ffmpeg/bin/ffmpeg;#这里 ffmpeg 是自行安装的,不是 SRS 自带的ffmpeg      /usr/local/bin/ffmpeg;engine ff {enabled         on;vfilter {}#vcodec          libx264;vcodec          h264_nvenc;vbitrate        5000;vfps            25;vwidth          1280;vheight         720;vthreads        12;#high、main、baselinevprofile        high;vpreset         medium;vparams {b:v         5000k;}acodec          libfdk_aac;abitrate        70;asample_rate    44100;achannels       2;aparams {}oformat flv;#这里 output 使用正常,按第三种方式会造成循环解码,直接给服务器干废了output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];#output          rtmp://127.0.0.1:[port]/[app]/[stream];#output          rtmp://127.0.0.1:[port]/[app]/[stream]_[engine]?vhost=[vhost];}}

在这里插入图片描述
重启 SRS 服务,推流即可自动解码。
注意:engine ff 是可以随意定义的,用解码地址拉流时,只需在后面拼接 _ff 即可,如果你定义的是 engine abc ,那么,你的推流访问地址后面拼接 _abc 即可,如:
RTMP 推流:

#非GPU硬件加速推流
ffmpeg -stream_loop -1 -re -i fly.mp4 -c:v libx264 -preset medium -tune zerolatency -b:v 5000k -maxrate 8000k -g 25 -c:a aac -b:a 128k -f flv rtmp://192.168.1.123/live/livestream#GPU硬件加速推流
ffmpeg -stream_loop -1 -re -i fly.mp4 -c:v h264_nvenc -preset medium -tune zerolatency -b:v 5000k -maxrate 8000k -g 25 -c:a aac -b:a 128k -f flv rtmp://192.168.1.123/live/livestream

ffplay 对 RTMP 拉流:

ffplay -fflags nobuffer -i rtmp://192.168.1.123/live/livestream

ffplay 对转码后的 RTMP 拉流:

ffplay -fflags nobuffer -i rtmp://192.168.1.123/live/livestream_ff
********************************* 只要思想不滑坡,办法总比困难多*********************************

相关文章:

SRS transcode支持 h264_nvenc 硬件解码方案

文章目录 SRS transcode支持 h264_nvenc 硬件解码方案1、修改文件2、重新编译3、使用 SRS transcode支持 h264_nvenc 硬件解码方案 SRS 是开源的流媒体服务,但在使用 GPU 服务器时,想要通过硬件加速,目前官方是不支持的,所以简单…...

阿里云服务器搭建开源版禅道

一,下载地址:禅道11.5版本发布,主要完善细节,修复bug,新增动态过滤机制 - 禅道下载 - 禅道项目管理软件 下载地址二: 禅道21.6.stable 实现旧编辑器撰写的文档无感升级至新版编辑器 - 禅道下载 - 禅道项目…...

【刷题Day21】TCP(浅)

说说 TCP 的四次挥手? TCP的四次挥手事用于安全关闭一个已建立的连接的过程,它确保双方都能完成数据传输并安全地释放连接资源。 简述步骤: 第一次挥手(FIN --> ACK):客户端主动关闭连接,…...

怎么用面向对象和状态机架构,设计一个通用的按键检测功能?

说起按键检测,在座的各位,哪个没被它折磨过? 我刚入门时,为了实现一个简单的按键功能,硬生生写了几十行代码,各种 if...else 嵌套,逻辑绕得我自己都头晕。 更可气的是,辛辛苦苦写完…...

Java基础系列-LinkedList源码解析

文章目录 简介LinkedList 插入和删除元素的时间复杂度?LinkedList 为什么不能实现 RandomAccess 接口? LinkedList 源码分析Node 定义初始化获取元素插入元素删除元素遍历链表 简介 LinkedList 是一个基于双向链表实现的集合类,经常被拿来和…...

day47—双指针-平方数之和(LeetCode-633)

题目描述 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a^2 b^2 c 。 示例 1: 输入:c 5 输出:true 解释:1 * 1 2 * 2 5示例 2: 输入:c 3 输出:f…...

qwen 14B模型配置文件,层名称weight_map. 28GB

qwen 14B模型配置文件,层名称weight_map. 28GB 目录 qwen 14B模型配置文件,层名称weight_map. 28GBmetadata(元数据)weight_map(权重映射)lm_head.weightmodel.layersmlp.{proj_type}.weightpost_attention_layernormself_attn.{proj_type}.{bias_or_weight}model.norm.w…...

LVDS系列8:Xilinx 7系可编程输入延迟(一)

在解析LVDS信号时,十分重要的一环就是LVDS输入信号线在经过PCB输入到FPGA中后,本来该严格对齐的信号线会出现时延,所以需要在FPGA内部对其进行延时对齐后再进行解析。 Xilinx 7系器件中用于输入信号延时的组件为IDELAYE2可编程原语&#xff0…...

【Oracle专栏】函数中SQL拼接参数 报错处理

Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 最近同事反馈了一个很奇怪的问题,即有一个函数,入参是当前年月,主要作用是通过SQL语句将不合规的数据插入到指定表中,插入数据时带上入参的年月参数。当前问题:单独测试SQL没有问题可以执行成功,…...

自然语言处理(NLP)领域大图

以下是一份自然语言处理(NLP)与大模型领域的领域大图,涵盖技术框架、发展脉络、交叉融合点和应用场景的完整解析: 1. 核心技术体系 基础分析层级 词法分析:分词、词性标注、命名实体识别句法分析:依存句法…...

【Linux我做主】GDB调试工具完全指南

Linux下GDB调试工具完全指南:25个核心命令详解与实战示例 github地址 有梦想的电信狗 前言 GDB(GNU Debugger)是Linux开发中不可或缺的调试工具,尤其在定位代码逻辑错误和内存问题时表现卓越。本文基于实际开发经验&#xff0…...

Pycharm 如何删除某个 Python Interpreter

在PyCharm中,点击右下角的“Interpreter Settings”按钮,或者通过菜单栏选择“File” > “Settings”(macOS用户选择“PyCharm” > “Preferences”)。在设置窗口中,导航到“Project: [Your Project Name]” >…...

在 Debian 12 中恢复被删除的 smb.conf 配置文件

https://forum.ubuntu.com.cn/viewtopic.php?t494763 本文结合ai输出,内容中可能有些错误,但确实解决了我的问题,我采取保留完整输出的方式摘录。 在 Debian 12 中恢复被删除的 smb.conf 配置文件,需结合 dpkg 和 ucf&#xff08…...

Day3:个人中心页面布局前端项目uniapp壁纸实战

接下来我们来弄一下个人中心页面布局user.vue <template><view class"userLayout"><view class"userInfo"><view class"avatar"><image src"../../static/Kx.jpg" mode"aspectFill"></im…...

访问”和“初始化本质区别以及C++静态成员变量定义位置详解

&#x1f4a1; 1.访问”和“初始化本质区别&#xff1a; ✅ 访问 protectedNum&#xff1a;Derived 作为 Base 的子类&#xff0c;是可以在自己的函数中访问 protectedNum 的。❌ 初始化 protectedNum&#xff1a;只能通过 Base 的构造函数来初始化&#xff0c;因为它是 Base …...

正则表达式反向引用的综合应用魔法:从重复文本到简洁表达的蜕变

“我....我要....学学学学....编程 java!” —— 这类“重复唠叨”的文本是否让你在清洗数据时头疼不已&#xff1f; 本文将带你一步步掌握正则表达式中的反向引用技术&#xff0c;并结合 Java 实现一个中文文本去重与清洗的实用工具。 结合经典的结巴实例。如何高效地将这样的…...

C实现md5功能

md5在线验证&#xff1a; 在线MD5计算_ip33.com 代码如下&#xff1a; #include "md5.h" #include <string.h> #include "stdio.h"/** 32-bit integer manipulation macros (little endian)*/ #ifndef GET_ULONG_LE #define GET_ULONG_LE(n,b,i) …...

FFmpeg+Nginx+VLC打造M3U8直播

一、视频直播的技术原理和架构方案 直播模型一般包括三个模块&#xff1a;主播方、服务器端和播放端 主播放创造视频&#xff0c;加美颜、水印、特效、采集后推送给直播服务器 播放端&#xff1a; 直播服务器端&#xff1a;收集主播端的视频推流&#xff0c;将其放大后推送给…...

在 Debian 10.x 安装和配置 Samba

1. 更新系统 sudo apt update sudo apt upgrade -y2. 安装 Samba sudo apt install samba -y3. 配置 Samba 备份默认配置文件 sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak编辑配置文件 sudo nano /etc/samba/smb.conf示例配置&#xff08;共享目录&#xff09; …...

基础(测试用例:介绍,测试用例格式,案例)

目录 测试用例介绍 测试用例编写格式 案例 测试用例介绍 用例&#xff1a;用户使用软件的案例场景 测试用例&#xff1a;是为测试项目而设计的测试执行文档 测试用例的作用&#xff1a; 防止漏测是实施测试的标准可以作为测试工作量的评估 测试用例编写格式 用例编号 用例…...

C++学习:六个月从基础到就业——内存管理:RAII原则

C学习&#xff1a;六个月从基础到就业——内存管理&#xff1a;RAII原则 本文是我C学习之旅系列的第十九篇技术文章&#xff0c;也是第二阶段"C进阶特性"的第四篇&#xff0c;主要介绍C中的RAII原则及其在资源管理中的应用。查看完整系列目录了解更多内容。 引言 在…...

Windows串口通信

Windows串口通信相比较Android串口通信,在开发上面相对方便一些。原理都是一样,需要仔细阅读厂商设备的串口通信协议。结合串口调试助手进行测试,测试通过后,编写代码实现。 比如近期就接触到了一款天平,其最大测量值为100g,测量精度0.001g。 拿到手之后我就先阅读串口通…...

bert项目解析

数据预处理 读取csv数据集 def read_file(file_path):data []label []with open(file_path, "r", encoding"utf-8") as file:reader csv.reader(file)next(reader) # 跳过标题行# row每一行用英文逗号分割成列表[标签,文本] 所以标签和文本用英文逗…...

Linux `init` 相关命令的完整使用指南

Linux init 相关命令的完整使用指南—目录 一、init 系统简介二、运行级别&#xff08;Runlevel&#xff09;详解三、常用 init 命令及使用方法1. 切换运行级别2. 查看当前运行级别3. 服务管理4. 紧急模式&#xff08;Rescue Mode&#xff09; 四、不同 Init 系统的兼容性1. Sy…...

【开源项目】Excel手撕AI算法深入理解(三):时序(RNN、mamba、Long Short Term Memory (LSTM)、xLSTM)

项目源码地址&#xff1a;https://github.com/ImagineAILab/ai-by-hand-excel.git 一、RNN 1. RNN 的核心思想 RNN 的设计初衷是处理序列数据&#xff08;如时间序列、文本、语音&#xff09;&#xff0c;其核心特点是&#xff1a; 隐藏状态&#xff08;Hidden State&#xff…...

嵌入式音视频开发指南:从MPP框架到QT实战全解析

嵌入式音视频开发指南:从MPP框架到QT实战全解析 一、音视频技术全景概述 1.1 技术演进里程碑 2003-2010年:标清时代(H.264/AVC + RTMP)2011-2018年:高清时代(H.265/HEVC + WebRTC)2019-至今:智能时代(AV1 + AI编解码 + 低延迟传输)1.2 现代音视频技术栈 #mermaid-s…...

构建专业金融图表系统的高效路径——QtitanChart在金融行业的应用价值

QtitanChart是一个C 库&#xff0c;它代表一组控件&#xff0c;这些控件使您可以快速轻松地为应用程序提供漂亮而丰富的图表。QtitanChart在Qt.C 上实现&#xff0c;并且支持所有主要的桌面操作系统 - Windows、Linux和Mac OSX。要将QtitanChart添加到您的程序中&#xff0c;只…...

如何通过window端来ssh连接本地虚拟机的ubuntu

首先在 Ubuntu 虚拟机上安装和配置 SSH 服务&#xff1a; # 安装 SSH 服务器 sudo apt update sudo apt install openssh-server# 检查 SSH 服务状态 sudo systemctl status ssh# 如果没有启动&#xff0c;则启动 SSH 服务 sudo systemctl start ssh# 设置开机自启动 sudo sys…...

问题:el-tree点击某节点的复选框由半选状态更改为全选状态以后,点击该节点展开,懒加载出来子节点数据以后,该节点又变为半选状态

具体问题场景&#xff1a; 用户点击父节点复选框将其从半选变为全选&#xff08;此时子节点尚未加载&#xff09;。 点击节点展开触发懒加载&#xff0c;加载子节点。 子节点加载后&#xff0c;组件重新计算父节点状态&#xff0c;发现并非所有子节点被选中&#xff0c;因此父节…...

【Rust 精进之路之第8篇-工具赋能】深入 Cargo:依赖管理、构建配置与工作空间 (Workspace)

系列: Rust 精进之路:构建可靠、高效软件的底层逻辑 作者: 码觉客 发布日期: 2025-04-20 引言:超越构建,Cargo 是 Rust 生态的引擎 在我们的 Rust 学习之旅初期(第二篇),我们已经与 Cargo 有过初步的接触。我们学会了使用 cargo new 创建项目骨架,用 cargo build 编…...