ffmpeg安装测试(支持cuda支持SRT)

news2024/11/22 15:02:16

文章目录

  • 背景
  • 安装ffmpeg
    • 直接下载可执行文件
      • 选择版本
      • 选择对应系统版本下载
      • 测试
      • Linux下安装
    • 查看支持协议以及编码格式
  • 常见错误
    • 缺少 libmvec.so.1
    • LD_LIBRARY_PATH 错误
  • GPU加速测试
  • SRT服务器搭建
    • 下载srs5.0源码
    • 解压安装
    • 配置
    • 启动
  • SRT推流测试
  • SRT播放测试

背景

在音视频开发测试中,FFmpeg是一个不可或缺的工具,它以其强大的音视频处理能力,支持多种格式的编解码、转换、录制、流化等功能,赢得了广泛的应用。本篇将主要讲述FFmpeg的安装过程,并特别关注如何使其支持NVIDIA的CUDA加速以及SRT(Secure Reliable Transport)流处理

安装ffmpeg

官网 提供直接下载可执行文件 和 源码 两种方式

 https://ffmpeg.org/

在这里插入图片描述

直接下载可执行文件

注意 尽量别下载第三方网站上别人编译好的文件,里面可能有坑

https://ffmpeg.org/download.html#build-windows

选择版本


2个不同的编译版本 一个是gyan.dev 一个是BtbN
在这里插入图片描述

选择对应系统版本下载

FFmpeg从4.1版本开始支持SRT(Secure Reliable Transport)协议。版本选择高于4.1的

在这里插入图片描述

测试

bin下面就是可执行文件
在这里插入图片描述

Linux下安装

在这里插入图片描述
在这里插入图片描述

注意glibc版本
在这里插入图片描述

查看支持协议以及编码格式

支持协议

ffmpeg -protocols

在这里插入图片描述

视频编解码器
ffmpeg -codecs
./ffmpeg -encoders
音频编解码器
ffmpeg -decoders | grep -i audio

官方版本的编译参数

configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-ffbuild-linux-gnu- --arch=x86_64 --target-os=linux 
--enable-gpl --enable-version3 --disable-debug 
--enable-iconv --enable-libxml2 --enable-zlib
--enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --enable-libpulse --enable-libvmaf --enable-libxcb --enable-xlib 
--enable-amf --enable-libaom --enable-libaribb24 
--enable-avisynth --disable-chromaprint --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libass 
--enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-mbedtls --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libmfx --disable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --disable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libdrm --enable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --disable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags=-pie --extra-libs='-ldl -lgomp' --extra-version=20230430

如果需要增加功能需要源码编译 参照下篇 ffmpeg源码编译安装

常见错误

在这里插入图片描述
在这里插入图片描述

缺少 libmvec.so.1

Linux(Ubuntu/CentOS) 下查看 GLIBC 版本
在这里插入图片描述
GLIBC 版本过低问题 请升级

参考
centos7GLIBC升级

LD_LIBRARY_PATH 错误

*** LD_LIBRARY_PATH shouldn't contain the current directory when
*** building glibc. Please change the environment variable

这意味着在编译 glibc(GNU C Library,GNU 的 C 语言标准库)时,你的 LD_LIBRARY_PATH 环境变量中包含了当前目录(. 或 ./),这通常是不被推荐的
LD_LIBRARY_PATH 是一个环境变量,它告诉动态链接器(如 ld.so)在哪些额外的目录中查找共享库。当编译 glibc 或其他系统级库时,包含当前目录作为搜索路径可能会导致意外的链接到不正确的库版本,或者链接到正在构建的库的不稳定版本,从而引入潜在的问题

GPU加速测试

使用GPU加速解码编码

./ffmpeg -i in.mp4 -c:v h264_nvenc -preset slow -b:v 5M output.mp4

在这里插入图片描述

参数解释:

-hwaccel cuda 启用 CUDA 硬件加速。
-c:v h264_cuvid 指定输入编解码器为使用 CUDA 加速的 H.264 解码器。
-c:v h264_nvenc 指定输出编解码器为使用 NVIDIA NVENC 的 H.264 编码器。 如果有多个gpu可以指定GPU ffmpeg -hwaccel_device cuda:0

h264_cuvid 是 NVIDIA 提供的一个 H.264 视频解码器,它利用 NVIDIA GPU 的计算能力来加速视频解码过程。
hevc_cuvid 265解码 hevc_nvenc 26编码 libx264 是一个开源 H.264 视频编码器库,完全由 CPU
执行,不依赖于 GPU 加速

SRT服务器搭建

下载srs5.0源码

https://ossrs.net/lts/zh-cn/docs/v5/doc/srt

解压安装

cd srs/trunk
./configure
make

配置

srt_server {
    enabled on;
    listen 10080;
    maxbw 1000000000;
    connect_timeout 4000;
    peerlatency 0;
    recvlatency 0;
    latency 0;
    tsbpdmode off;
    tlpktdrop off;
    sendbuf 2000000;
    recvbuf 2000000;
}

启动

./objs/srs -c conf/srt.conf 

在这里插入图片描述

SRT推流测试

ffmpeg -re -i in.flv -c copy -pes_payload_size 0 -f mpegts
‘srt://10.168.60.166:10080?streamid=#!::r=live/livestream,m=publish’
在这里插入图片描述
服务器日志
在这里插入图片描述

SRT播放测试

ffplay.exe "srt://10.168.60.166:10080?streamid=#!::r=live/livestream,m=request"

在这里插入图片描述
服务器日志
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2114594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka 分布式消息系统详细介绍

Kafka 分布式消息系统 一、Kafka 概述1.1 Kafka 定义1.2 Kafka 设计目标1.3 Kafka 特点 二、Kafka 架构设计2.1 基本架构2.2 Topic 和 Partition2.3 消费者和消费者组2.4 Replica 副本 三、Kafka 分布式集群搭建3.1 下载解压3.1.1 上传解压 3.2 修改 Kafka 配置文件3.2.1 修改z…

Java操作Elasticsearch的实用指南

Java操作Elasticsearch的实用指南 一、创建索引二、增删改查 一、创建索引 在ElasticSearch中索引相当于mysql中的表,mapping相当于表结构,所以第一步我们要先创建索引。 假设我们有一张文章表的数据需要同步到ElasticSearch,首先需要根据数据库表创建…

DisplayManagerService启动及主屏添加-Android13

DisplayManagerService启动及主屏添加-Android13 1、DisplayManagerService启动1.1 简要时序图 2、DEFAULT_DISPLAY主屏幕添加2.1 物理屏热插拔监听2.2 物理屏信息 3、默认屏幕亮度 1、DisplayManagerService启动 1.1 简要时序图 代码位置:frameworks/base/service…

git:基本操作(2)

目录 git操作(2) 1.版本回退 2.撤销修改 3.删除文件 git操作(2) 1.版本回退 git能够管理文件的历史版本,这也是版本控制器的重要能力,因此,git也提供了版本回退这样的功能。 执行git reset…

QT6聊天室项目 网络通信实现逻辑分析

实现逻辑 模块话网络通信设计分析 NetClient类 功能:负责与服务器进行通信httpClient:处理HTTP请求websocketClient:处理WebSocket通信 HTTP请求封装 设计请求和服务器响应的接口设计函数测试网络连接性设计处理的函数处理HTTP请求(后期实现…

C#/.NET/.NET Core推荐学习路线文档文章

前言 专门为C#/.NET/.NET Core推荐学习路线&文档&文章提供的一个Issues,各位小伙伴可以把自己觉得不错的学习路线、文档、文章相关地址分享出来🤞。 https://github.com/YSGStudyHards/DotNetGuide/issues/10 🏷️C#/.NET/.NET Cor…

智慧工地解决方案-2

### 1. 智慧工地解决方案概述 《智慧工地解决方案》针对传统工地的低效率和高风险问题,提出了一套集成现代技术的智能管理系统,以提升工地安防和生产效率。 ### 2. 工地现状与挑战 当前工地存在安全意识薄弱、管理粗放、环境污染监测困难等问题&#…

数据分析面试题:客户投保问题分析

目录 0 场景描述 1 数据准备 2 问题分析 2.1 计算小微公司的平均经营时长 2.2 计算小微公司且角色为投保人,保险起期在18年的总保费 2.3 假设,DWD_CUSTOMER_REL客户关联关系表中,存在部分客户保单数很多,部分客户保单数很少的情况,此时DWD_CUSTOMER_BASE表关联,程序…

Learn ComputeShader 10 HUD Overlay

前言: 1. HUD Overlay (Head-Up Display Overlay) 定义: HUD 是指游戏或应用程序中的一类叠加界面元素,通常显示在屏幕上,用于向用户提供实时信息。它通常显示关键信息而不会打断用户的主要活动或视线。应用场景: 常见于游戏、飞行模拟器和…

[项目][CMP][Page Cache]详细讲解

目录 1.申请内存2.释放内存3.框架 1.申请内存 当Central Cache向Page Cache申请内存时,Page Cache先检查对应位置有没有span,如果没有则向更大页寻找一个span,如果找到则分裂成两个 比如:申请的是4页page,4页page后面…

【MRI基础】TI反转时间概念

在磁共振成像 (MRI) 中,反转时间 (TI) 是反转恢复脉冲序列中的一个特定参数。它表示施加 180 度反转脉冲(将纵向磁化翻转到相反方向)与随后的 90 度激励脉冲(将磁化翻转到横向平面以创建 MR 信号)之间的时间间隔。 MRI…

常见概念 -- 电层业务调制谱宽与光层通道谱宽

本文介绍了“电层业务调制谱宽”和“光层通道谱宽”这两个概念,并结合网管的配置界面解释二者的配置方法。 电层业务调制谱宽 电层业务调制谱宽与光线路码型唯一相关,光线路码型确定后谱宽随之确定。 电层业务调制谱宽是指某业务信号的损耗谱从峰值下…

C++解决:求排列数

描述 输入两个整数m,n&#xff0c;求m个数字中选n个数的排列数。&#xff08;1<n<m<50&#xff09; 输入描述 两个正整数m和n。 输出描述 一个正整数表示排列数。 用例输入 1 6 5 用例输出 1 720 AC code #include<bits/stdc.h> using namespace s…

[linux 驱动]platform总线设备驱动详解与实战

目录 1 描述 2 结构体 2.1 bus_type 2.2 platform_bus_type 2.2.1 platform_match 2.2.2 platform_uevent 2.2.3 platform_dma_configure 2.2.4 platform_dev_pm_ops 2.3 platform_driver 2.4 platform_device 3 platform注册 3.1 platform_driver_register 3.1.1 …

【python因果推断库11】工具变量回归与使用 pymc 验证工具变量4

目录 Wald 估计与简单控制回归的比较 CausalPy 和 多变量模型 感兴趣的系数 复杂化工具变量公式 Wald 估计与简单控制回归的比较 但现在我们可以将这个估计与仅包含教育作为控制变量的简单回归进行比较。 naive_reg_model, idata_reg make_reg_model(covariate_df.assign…

C语言:刷题日志(1)

一.阶乘计算升级版 本题要求实现一个打印非负整数阶乘的函数。 其中n是用户传入的参数&#xff0c;其值不超过1000。如果n是非负整数&#xff0c;则该函数必须在一行中打印出n!的值&#xff0c;否则打印“Invalid input”。 首先&#xff0c;知道阶乘是所有小于及等于该数的…

halcon 自定义距离10的一阶导数幅图,摆脱sobel的3掩码困境

一&#xff0c;为什么要摆脱3的掩码 在处理图像的过程中&#xff0c;会用到平滑算子&#xff0c;很容易破坏边际&#xff0c;所谓的一阶导数sobel只计算掩码为3的差分&#xff0c;在幅度图分割中&#xff0c;往往是很难把握的。 举个例子-现在图像头平滑好了&#xff0c;缺陷…

【Python 千题 —— 算法篇】寻找两个正序数组的中位数

Python 千题持续更新中 …… 脑图地址 &#x1f449;&#xff1a;⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目背景 在处理大规模数据时&#xff0c;我们经常需要对数据进行排序和分析。一个常见问题是如何高效地从两个正序数组中找出它们的中位数。…

今天又学到了——图编号关联章节号,QGIS下载文件存储的瓦片

记录教程来源&#xff1a;​​​​​​【Word图编号关联章节号】图片分章节 编号&#xff0c;图1-1、图2-1_哔哩哔哩_bilibili 上面链接这个实现的是这个效果&#xff1a; word自动目录及章节自动编号教程_哔哩哔哩_bilibili&#xff0c;这个的效果是自己设计多级列表&#xf…

Pr:首选项 - 音频

Pr菜单&#xff1a;编辑/首选项 Edit/Preferences Premiere Pro 首选项中的“音频” Audio选项卡主要作用是控制音频的处理设置&#xff0c;包括音量调整、波形生成、音频渲染等选项&#xff0c;这些设置有助于优化音频的处理和编辑工作&#xff0c;适用于不同的剪辑需求和项目…