FFmpeg开发笔记(六十七)Windows给FFmpeg集成支持RIST协议的librist
《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2 FFmpeg推流和拉流”提到直播行业存在RTSP和RTMP两种常见的流媒体协议。除此以外,还有比较两种比较新的流媒体协议,分别是SRT和RIST。
其中SRT全称为Secure Reliable Transport,中文叫做安全可靠传输协议。RIST全称为Reliable Internet Stream Transport,中文叫做可靠的互联网流传输协议。SRT和RIST两个协议均在2017年发布,腾讯视频云已将SRT作为传输层之上的协议。根据腾讯视频云的实践,相比传统的RTMP直播协议,SRT对推流卡顿问题有明显改善。
接下来以微软的视窗系统为例,介绍如何在Windows环境给FFmpeg集成支持RIST协议的librist,具体的操作步骤说明如下:
一、配置librist
librist是一款RIST协议的支持库。它的源码托管页面在https://code.videolan.org/rist/librist,最新版本是2024年11月发布的librist-v0.2.11,该版本的源码包下载地址是https://code.videolan.org/rist/librist/-/archive/v.0.2.11/librist-v.0.2.11.tar.gz。
librist的配置步骤说明如下。
1、安装编译工具meson和ninja
meson和ninja是基于Python语言的编译工具,故需确保Windows系统已经安装了Python3。另外,还要按照《FFmpeg开发实战:从零基础到短视频上线》第一章的“1.3.2 安装依赖的Windows软件”给电脑安装Visual Studio 2022。
接着依次选择Windows开始菜单的“Visual Studio 2022”→“x64 Native Tools Command Prompt for VS 2022”,打开Visual Studio 2022的命令行界面,执行以下命令安装meson和ninja。
pip3 install meson
pip3 install ninja
2、使用meson配置librist
先下载最新的librist源码,解压下载后的源码包,再从Visual Studio 2022的命令行进入librist源码目录:
cd librist-v.0.2.11
然后运行下面命令生成librist的VS工程:
meson setup build --buildtype=release --backend=vs
配置完成后,librist源码目录下出现build目录,里面便是meson给librist生成的VS工程。
二、编译librist
打开Visual Studio 2022,在欢迎页面单击右侧的“打开项目或解决方案”,在弹出的文件对话框中选择librist-v.0.2.11\build目录下的libRIST.sln。
打开librist工程后,依次选择顶部菜单:生成→生成→生成librist,Visual Studio就开始编译librist模块。编译过程可在Visual Studio界面下方观察,直到编译完成如下图所示。
此时可在librist-v.0.2.11\build目录下找到librist.lib和librist.dll,这两个文件就是编译生成的librist库文件。
三、安装librist
确保Windows系统已经按照《FFmpeg开发实战:从零基础到短视频上线》第一章“1.3 Windows系统安装FFmpeg”的说明安装配置了MSYS,再按照以下步骤在MSYS环境安装librist。
1、在msys64的/usr/local目录下新建librist目录,并在该目录下创建lib子目录;
2、把librist工程中build目录下的librist.lib和librist.dll两个文件复制到第一步创建的lib目录;
3、在lib目录下创建pkgconfig子目录,并把librist工程的build\meson-private\librist.pc复制到pkgconfig目录;然后打开librist.pc,把开头一行改成下面这样。
prefix=/usr/local/librist
4、把librist工程的include目录复制到msys64的/usr/local/librist目录,把build\include\librist目录复制到msys64的/usr/local/librist/include目录;
经过以上步骤操作后的librist目录结构如下所示。
/usr/local/librist
|--------------- lib
| |----- librist.lib
| |----- librist.dll
| |----- pkgconfig
| |----- librist.pc
|--------------- include
| |----- librist
| |----- librist.h
| |----- librist_config.h
| |----- ……
四、编译安装FFmpeg
先下载最新的FFmpeg源码(版本号需大于等于7.1),再把FFmpeg源码包复制到MSYS环境的/usr/local/src目录下。接着在MSYS控制台执行下面命令解压源码包:
cd /usr/local/src
unzip ffmpeg-n7.1.1.zip
确保MSYS环境已经按照《FFmpeg开发实战:从零基础到短视频上线》该书第八章的“8.1.1 给FFmpeg集成x264”和“8.1.5 给FFmpeg集成x265”安装了H.264的编码器libx264和H.265的编码器libx265,也按照该书第十章的“10.1.1 FFmpeg集成SDL”安装了Windows系统的SDL2库,并且按照之前的文章安装了H.266的编码器libvvenc,然后执行下面命令配置FFmpeg的编译环境:
cd ffmpeg-n7.1.1
export PKG_CONFIG_PATH=/usr/local/librist/lib/pkgconfig:$PKG_CONFIG_PATH
./configure --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-librist --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32
配置完毕执行下面命令编译和安装FFmpeg,编译完成的ffmpeg库将会安装到configure指定的/usr/local/ffmpeg目录。
make
make install
cp /usr/local/librist/lib/librist.dll /usr/local/ffmpeg/bin
五、查看FFmpeg的安装结果
运行下面命令查看FFmpeg的安装版本:
ffmpeg -version
上面命令返回的FFmpeg版本信息如下:
ffmpeg version 7.1.1 Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-librist --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32
libavutil 59. 39.100 / 59. 39.100
libavcodec 61. 19.101 / 61. 19.101
libavformat 61. 7.100 / 61. 7.100
libavdevice 61. 3.100 / 61. 3.100
libavfilter 10. 4.100 / 10. 4.100
libswscale 8. 3.100 / 8. 3.100
libswresample 5. 3.100 / 5. 3.100
libpostproc 58. 3.100 / 58. 3.100
根据以上返回的版本信息,可知已安装的FFmpeg版本号为7.1.1,同时configuration这行找到“--enable-librist”,说明FFmpeg已经启用了支持RIST协议的librist。
更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。
FFmpeg开发笔记(六十七)Windows给FFmpeg集成支持RIST协议的librist的更多相关文章
- FFmpeg开发笔记(三):ffmpeg介绍、windows编译以及开发环境搭建
前言 本篇章是对之前windows环境的补充,之前windows的是无需进行编译的,此篇使用源码进行编译,版本就使用3.4.8. FFmpeg简介 FFmpeg是领先的多媒体框架,能够解码 ...
- FFmpeg开发笔记(四):ffmpeg解码的基本流程详解
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放
前言 ffmpeg播放rtsp网络流和摄像头流. Demo 使用ffmpeg播放局域网rtsp1080p海康摄像头:延迟0.2s,存在马赛克 使用ffmpeg播放网络rtsp文件流 ...
- FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台
FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待 前言 将ffmpeg移植到海思H ...
- Django开发笔记六
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.登录功能完善 登录成功应该是重定向到首页,而不是转发 ...
- FFmpeg开发笔记(二)搭建Windows系统的开发环境
由于Linux系统比较专业,个人电脑很少安装Linux,反而大都安装Windows系统,因此提高了FFmpeg的学习门槛,毕竟在Windows系统搭建FFmpeg的开发环境还是比较麻烦的.不过若有已经 ...
- FFmpeg开发笔记(一)搭建Linux系统的开发环境
对于初学者来说,如何搭建FFmpeg的开发环境是个不小的拦路虎,因为FFmpeg用到了许多第三方开发包,所以要先编译这些第三方源码,之后才能给FFmpeg集成编译好的第三方库.不过考虑到刚开始仅仅调用 ...
- FFmpeg开发实战(一):FFmpeg 打印日志
在Visual Studio 开发(二):VS 2017配置FFmpeg开发环境一文中,我们配置好了FFmpeg的开发环境,下面我们开始边实战,边学习FFmpeg. 首先,我们要学习的就是FFmpeg ...
- FFmpeg开发实战(二):FFmpeg 文件操作
FFmpeg 提供了丰富的API供我们使用,下面我们来讲述一下文件操作相关的API: FFmpeg 删除文件:avpriv_io_delete() FFmpeg 重命名文件:avpriv_io_mov ...
随机推荐
- Oracle 修改SYS、system用户密码
by:授客 QQ:1033553122 概念 SYS用户是Oracle中权限最高的用户,而SYSTEM是一个用于数据库管理的用户.在数据库安装完之后,应立即修改SYS,SYSTEM这两个用户的密码 ...
- storm部署文档
背景 这篇笔记原来是记录在印象笔记中的,没有发布到博客中,这次我重新整理一下发布上来,希望给读者以参考. Storm的部署手册 Zookeepr的部署 首先下载安装包:apache-zookeeper ...
- 《机器人SLAM导航核心技术与实战》前言
<机器人SLAM导航核心技术与实战>前言 温馨提示: 本篇文章是我最新出版的书籍<机器人SLAM导航核心技术与实战>的前言部分,感兴趣的读者可以购买纸质书籍来进行更加深入和系统 ...
- DPDI(Dispatch PDI)kettle调度管理平台升级内容
DPDI升级内容(20240815版) DPDI online部署方式 定时任务优化(支持轮询机制,Cron可提示近5次运行时间) 运行任务优化(支持多机器分布式运行) 其它小功能优化 1. 首页可手 ...
- [python] 基于WatchDog库实现文件系统监控
Watchdog库是Python中一个用于监控文件系统变化的第三方库.它能够实时监测文件或目录的创建.修改.删除等操作,并在这些事件发生时触发相应的处理逻辑,因此也被称为文件看门狗. Watchdog ...
- 代码随想录第二十五天 | Leecode 491. 非递减子序列、46. 全排列、47. 全排列 II
Leecode 491. 非递减子序列 题目描述 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 .你可以按 任意顺序 返回答案. 数组中可能含有重 ...
- Nacos源码—7.Nacos升级gRPC分析二
大纲 5.服务变动时如何通知订阅的客户端 6.微服务实例信息如何同步集群节点 5.服务变动时如何通知订阅的客户端 (1)服务注册和服务订阅时发布的客户端注册和订阅事件的处理 (2)延迟任务的执行引擎源 ...
- TensorFlow 基础 (04)
最近都面临一个问题是, 要用纯 sql 来实现所有的逻辑, 其实 union 呀, 嵌套, 子查询呀, 这些都还好, 但那带有逻辑判断的, 这就整不好整了, 就多分支的, 再分支这种... 也不知为啥 ...
- 代码重构(OOP)-小栗子(PyQt5)
主要是为了练习下 面向对象, 不断提醒自己代码一定要写成 营销风格, 和优雅. 最近在B站上看一下关于 Python GUI 编程的内容. 恰好呢, 前不久的一个 将本地 Ecxcel 数据 发布到 ...
- FastAPI与Alembic:数据库迁移的隐秘艺术
title: FastAPI与Alembic:数据库迁移的隐秘艺术 date: 2025/05/13 02:02:31 updated: 2025/05/13 02:02:31 author: cmd ...