SciTech-EECS-FFmpeg开发笔记(六十七)

  1. FFmpeg开发笔记(61): Linux给FFmpeg集成H.266编码器vvenc 05-25
  2. FFmpeg开发笔记(62): Windows给FFmpeg集成H.266编码器vvenc 06-02
  3. FFmpeg开发笔记(63): FFmpeg使用vvenc把视频转为H.266编码 06-07
  4. FFmpeg开发笔记(64): 使用国产的RedPlayer播放器观看网络视频 06-08
  5. FFmpeg开发笔记(65): Linux给FFmpeg集成LC3音频的编码器liblc3 06-14
  6. FFmpeg开发笔记(66): Windows给FFmpeg集成LC3音频的编码器liblc3 06-15
  7. FFmpeg开发笔记(67): Windows给FFmpeg集成支持RIST协议的librist 06-21

Windows给FFmpeg集成支持RIST协议的librist

《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2 FFmpeg推流和拉流”提到,

  • SRT和RIST 是 比以往常用的 RTSP和RTMP 更新的两种的常用流媒体协议。
  • SRT全称为Secure Reliable Transport,中文叫做安全可靠传输协议。
  • RIST全称为Reliable Internet Stream Transport,中文叫做可靠的互联网流传输协议。
  • SRT和RIST两个协议均在2017年发布,腾讯视频云已将SRT作为传输层之上的协议。

根据腾讯视频云的实践,相比传统的RTMP直播协议,SRT对推流卡顿问题有明显改善。

接下来以微软Windows系统为例,介绍如何在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 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

  1. 打开librist工程: 打开Visual Studio 2022,在欢迎页面单击右侧的“打开项目或解决方案”,

    在弹出的文件对话框中选择librist-v.0.2.11\build目录下的libRIST.sln。
  2. 打开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

  1. 先下载最新的FFmpeg源码(版本号需大于等于7.1),

    后把FFmpeg源码包复制到MSYS环境的/usr/local/src目录下。

    接着在MSYS控制台执行下面命令解压源码包:cd /usr/local/src && unzip ffmpeg-n7.1.1.zip
  2. 确保MSYS环境已经按照《FFmpeg开发实战:从零基础到短视频上线》该书:

    第八章的“8.1.1 给FFmpeg集成x264”和“8.1.5 给FFmpeg集成x265”安装了H.264/H.265编码器libx264/libx265,

    第十章的“10.1.1 FFmpeg集成SDL”安装了Windows系统的SDL2库,

    并且按照之前的文章安装了H.266的编码器libvvenc,
  3. 执行下面命令配置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
  4. 配置完毕执行下面命令编译和安装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开发实战:从零基础到短视频上线》](https://item.jd.com/14020415.html)

SciTech-EECS-FFmpeg开发笔记(六十七)​《FFmpeg开发实战:从零基础到短视频上线》: 给FFmpeg集成支持RIST协议的librist的更多相关文章

  1. Django开发笔记六

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.登录功能完善 登录成功应该是重定向到首页,而不是转发 ...

  2. 《Android Studio开发实战 从零基础到App上线》资源下载和内容勘误

    转载于:https://blog.csdn.net/aqi00/article/details/73065392 资源下载 下面是<Android Studio开发实战 从零基础到App上线&g ...

  3. Hololens开发笔记之使用Unity开发一个简单的应用

    一.Hololens概述 Hololens有以下特性 1.空间映射借助微软特殊定制的全息处理单元(HPU),HoloLens 实现了对周边环境的快速扫描和空间匹配.这保证了 HoloLens能够准确地 ...

  4. .Net开发笔记(十七) 应用程序扩展

    在很多场合,我们需要在已有软件程序上增加一些新的功能,几乎所有原因是因为原有软件功能不能满足我们的需要,我们平时做的插件就属于这种情况,最常见的是VS IDE的插件开发,网上老外写的一篇关于插件开发的 ...

  5. 钉钉开发笔记(六)使用Google浏览器做真机页面调试

    注: 参考文献:https://developers.google.com/web/ 部分字段为翻译文献,水平有限,如有错误敬请指正 步骤1: 从Windows,Mac或Linux计算机远程调试And ...

  6. 树莓派开发笔记(十七):树莓派4B+上Qt多用户连接操作Mysql数据库同步(单条数据悲观锁)

    前言   安装了mysq数据库,最终时为了实现在一个树莓派上实现多用户多进程操作的同步问题,避免数据并发出现一些错误,本篇安装了远程服务并且讲述了使用Qt进行悲观锁for update操作,命令行进行 ...

  7. Java开发笔记(十七)各得其所的多路分支

    前面提到条件语句的标准格式为“if (条件) { /* 条件成立时的操作代码 */ } else { /* 条件不成立时的操作代码 */ }”,乍看之下仿佛只有两个分支,一个是条件成立时的分支,另一个 ...

  8. Android笔记(六十七) 自定义控件

    实际编程中,系统提供的控件往往无法满足我们的需求,一来是样子丑陋,二来是一些复杂的组合需要多次使用的话,每次都写一堆控件的组合会很耗费时间,所以我们将这些组件的组合自定义为一个新的控件,以后使用的时候 ...

  9. (SenchaTouch+PhoneGap)开发笔记(2)开发环境搭建二

    一.Java环境和Android SDK  1.安装JDK和JRE JRE会在JDK安装完成后自动出现安装界面. 安装完成后,设置环境变量 JAVA_HOME    D:\Program Files\ ...

  10. [转] WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单

    以下文章来自   http://www.blogjava.net/jacally/articles/186655.html 现在的项目中需要用到SOA概念的地方越来越多,最近我接手的一个项目中就提出了 ...

随机推荐

  1. .NET Core中的配置Configuration实战

    在前面的一篇文章中,我们对.NET 中的配置Configuration进行了一个详细的介绍,并且从整个源码的解读解释了配置中的核心接口以及主要的实现类.文章链接为:https://cshellowor ...

  2. php 二维数组转成一维数组

    // 1 $c = call_user_func('array_merge', $reds);// 2 $c = array_merge(...$reds);// 3 array_map(functi ...

  3. thinkphphp 计算分页 和分页总数 和sql计算分页 php

    利用page计算分页 $p=input('p')?input('p'):1; $limit=6; $res=db('points_log')->where(['p_uid'=>$uid,' ...

  4. jsp 输入out.println()报错

    jsp 输入out.println()报错,输入out.后没有代码提示,println()报红. 可以看看有没有导包jsp-api. <dependency> <groupId> ...

  5. DeepSeek 多模态模型 Janus-Pro 本地部署

    一.概述 Janus-Pro是DeepSeek最新开源的多模态模型,是一种新颖的自回归框架,统一了多模态理解和生成.通过将视觉编码解耦为独立的路径,同时仍然使用单一的.统一的变压器架构进行处理,该框架 ...

  6. 一些 DP 思维题

    最单纯的思维题就是想出来思路就会做,几乎没有实现难度的题.这种题 CF 与 Atcoder 比较多,这里集中记录一下. 对于 DP 而言,思维题只需要想出转移方程即可. CF1174E Ehab an ...

  7. Markdown 使用十分钟入门

    Markdown 十分钟入门 标题 标题前#+空格 支持6级标题 输入样式#+空格:##+空格:以此类推, *注意标题输入的#前面不能有空格 字体 斜体 # 这里不要空格 _斜体_ *加一个* 字体加 ...

  8. C# AggreateException

    在 C# 中,AggregateException 是一种特殊类型的异常,它允许在多个异步任务中捕获并组合多个异常.当在一个异步任务中同时执行多个子任务时,如果其中任何一个子任务抛出了异常,那么父任务 ...

  9. WPF的Image控件图片不能显示出来

    在Visual studio中,将图片的属性的"生成操作"从"无"改为"资源". 最终解决问题:

  10. MQTT协议与ODOO的结合使用

     一.MQTT简述      MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的 ...