FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流

FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流

合集 - FFmpeg开发实战(46)

1.FFmpeg开发笔记(一)搭建Linux系统的开发环境2023-04-162.FFmpeg开发笔记(二)搭建Windows系统的开发环境2023-04-293.FFmpeg开发笔记(三)FFmpeg的可执行程序介绍03-094.FFmpeg开发笔记(四)FFmpeg的动态链接库介绍03-105.FFmpeg开发笔记(五)更新MSYS的密钥环03-166.FFmpeg开发笔记(六)如何访问Github下载FFmpeg源码03-177.FFmpeg开发笔记(九)Linux交叉编译Android的x265库03-308.FFmpeg开发笔记(十)Linux环境给FFmpeg集成vorbis和amr03-319.FFmpeg开发笔记(十一)Windows环境给FFmpeg集成vorbis和amr04-0510.FFmpeg开发笔记(七)欧拉系统编译安装FFmpeg03-2311.FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库03-2412.FFmpeg开发笔记(十二)Linux环境给FFmpeg集成libopus和libvpx04-0613.FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx04-1314.FFmpeg开发笔记(十四)FFmpeg音频重采样的缓存04-1415.FFmpeg开发笔记(十五)详解MediaMTX的推拉流04-2016.FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库04-2117.FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass04-2718.FFmpeg开发笔记(十八)FFmpeg兼容各种音频格式的播放05-0419.FFmpeg开发笔记(十九)FFmpeg开启两个线程分别解码音视频05-0520.FFmpeg开发笔记(二十)Linux环境给FFmpeg集成AVS3解码器05-1221.FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器05-1822.FFmpeg开发笔记(二十二)FFmpeg中SAR与DAR的显示宽高比05-1923.FFmpeg开发笔记(二十三)使用OBS Studio开启RTMP直播推流05-2624.FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器05-2725.FFmpeg开发笔记(二十五)Linux环境给FFmpeg集成libwebp06-0126.FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流06-0227.FFmpeg开发笔记(二十七)解决APP无法访问ZLMediaKit的直播链接问题06-0828.FFmpeg开发笔记(二十八)Linux环境给FFmpeg集成libxvid06-0929.FFmpeg开发笔记(二十九)Windows环境给FFmpeg集成libxvid06-1530.FFmpeg开发笔记(三十)解析H.264码流中的SPS帧和PPS帧06-1631.FFmpeg开发笔记(三十一)使用RTMP Streamer开启APP直播推流06-2232.FFmpeg开发笔记(三十二)利用RTMP协议构建电脑与手机的直播Demo06-2333.FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作06-2934.FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist06-3035.FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt07-0636.FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流07-0737.FFmpeg开发笔记全目录(FFmpeg开发实战详解,含直播系统的搭建过程)06-1738.FFmpeg开发笔记(三十七)分析SRS对HLS协议里TS包的插帧操作07-1339.FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址07-1440.FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg07-2041.FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流07-2142.FFmpeg开发笔记(四十一)结合OBS与MediaMTX实现SRT直播推流07-2743.FFmpeg开发笔记(四十二)使用ZLMediaKit开启SRT视频直播服务07-2844.FFmpeg开发笔记(四十三)使用SRS开启SRT协议的视频直播服务08-0345.FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP08-04

46.FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流08-10

收起

​SRT Streamer是一个安卓手机端的开源SRT协议直播推流框架,可用于RTMP直播和SRT直播。SRT Streamer支持的视频编码包括H264、H265等等,支持的音频编码包括AAC、OPUS等等,可谓功能强大的APP直播框架。

相比之下,另一款APP直播框架RTMP Streamer支持RTMP直播和RTSP直播,不支持SRT协议的直播。而本文讲述的SRT Streamer支持RTMP直播和SRT直播,不支持RTSP协议的直播。有关RTMP Streamer的说明参见之前的文章《使用RTMP Streamer开启APP直播推流》,下面介绍如何使用SRT Streamer开启手机的APP直播推流。

一、下载SRT Streamer

SRT Streamer采取全Kotlin编码,需要在Android Studio Jellyfish(小水母版本)上编译运行,并且依赖最新的JDK17,对运行环境与开发者的技能要求都比较高。博主花了好长时间才找到可用的SRT Streamer源码,如果大家需要这套源码,可在京东自营购买《FFmpeg开发实战:从零基础到短视频上线》一书,联系作者获取SRT Streamer源码。
博主找到的SRT Streamer源码采用Kotlin编写,非Java编写,需使用小水母版本的AS打开。所以需要先安装小水母版本的AS,也就是Android Studio Jellyfish,该版本AS的下载地址为 https://redirector.gvt1.com/edgedl/android/studio/ide-zips/2023.3.1.18/android-studio-2023.3.1.18-windows.zip 。

二、加载SRT Streamer

下载的SRT Streamer源码是个完整的AS项目,启动小水母版本的Android Studio,依次选择菜单:File→Open,在弹出的文件对话框中选择解压后的SRT Streamer源码目录。Android Studio就开始自动下载相关组件,并执行gradle同步等操作。为了加快SRT Streamer项目的加载速度,可打开项目级别的build.gradle,在repositories节点内部补充以下配置:

// 以下四行添加阿里云的仓库地址,方便国内开发者下载相关插件
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/google'}
maven { url 'https://maven.aliyun.com/repository/gradle-plugin'}
maven { url 'https://maven.aliyun.com/repository/public'}
// 以下添加华为的仓库地址
maven { url 'https://developer.huawei.com/repo/'}

增加以上配置的目的是引入国内的仓库地址,以便加快相关依赖包的下载速度。
等待SRT Streamer项目成功加载完毕,查看Android Studio左侧的导航图,可见SRT Streamer项目由下列五个模块组成:
core模块:这是SRT Streamer给音频流和视频流分别编码的模块。
demo-camera模块:这是SRT Streamer的摄像头直播演示模块,也是APP工程的主入口。
demo-screenrecorder模块:这是SRT Streamer的屏幕录像直播演示模块。
extension-rtmp模块:这是SRT Streamer处理RTMP协议通信的模块。
extension-srt模块:这是SRT Streamer处理SRT协议通信的模块。

三、启动SRT Streamer

Android Studio成功加载SRT Streamer之后,即可在手机上安装SRT Streamer的演示APP了。有关APP编译和安装的详细步骤参见《Android Studio开发实战:从零基础到App上线(第3版)》一书第2章的“2.1.1  App的运行环境”,这里不再赘述。
SRT Streamer的演示APP在手机上安装完毕,启动后的初始界面是下面这样的。

注意首次使用SRT Streamer需要先配置SRT服务器信息,点击界面左上角的三点设置按钮,打开服务器设置页面如下所示。

这里要修改以下四个SRT服务器配置:

1、Endpoint区域的Type字段:点击后下拉选择SRT device,表示采用SRT协议推流。
2、SRT Server区域的IP字段:填流媒体服务器的IP。
3、SRT Server区域的Port字段:填流媒体服务器对SRT协议的开放端口。比如SRS默认的SRT端口号为10080,ZLMediaKit默认的SRT端口号为9000。
4、SRT Server区域的Stream ID字段:填“#!::r=live/test,m=publish”。
可见SRT Streamer提供了丰富多样的直播形式,既可以通过手机摄像头直播,还能对手机的屏幕操作进行直播。具体的直播协议又包括RTMP和SRT两种,可以满足绝大多数场景的直播需求,而且SRT Streamer是个开源软件,提供了完整的APP直播录制全套代码,非常适合开发者学习和研究。

更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入探索 Wireshark——网络封包分析的利器

一、引言 在当今数字化的时代,网络通信变得日益复杂和关键。无论是企业的网络运维,还是网络安全研究,都需要深入了解网络中传输的数据。Wireshark 作为一款强大的网络封包分析工具,成为了网络工程师、安全研究人员和技术爱好者不…

8.6-设置mysql开机自启+角色生效+主从数据库

一、设置mysql开机自启 1.添加开机自启 #添加开机启动 [root004 mysql]# #systemctl enable mysqld [root004 mysql]# chkconfig --list注:该输出结果只显示 SysV 服务,并不包含 原生 systemd 服务。SysV 配置数据 可能被原生 systemd 配置覆盖。 要列…

【C语言】位段详解

🦄个人主页:小米里的大麦-CSDN博客 🎏所属专栏:https://blog.csdn.net/huangcancan666/category_12718530.html 🎁代码托管:黄灿灿 (huang-cancan-xbc) - Gitee.com ⚙️操作环境:Visual Studio 2022 目录 一、什么是位段? 二、…

Leetcode面试经典150题-2.两数相加

解法都在代码里,不懂就留言或者私信 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val …

ubuntu插入模块测试

文章目录 一、环境二、步骤 一、环境 ubuntu 20.04 内核版本:5.15-generic 二、步骤 先看一下ubuntu用的哪个内核版本: 到内核目录下: 随便建个文件夹存一下编译完的ko模块: 写测试代码: 写makefile:…

Flink-DataWorks第六部分:数据运维(第62天)

系列文章目录 运维中心 4.1 功能概述 4.2 操作流程 4.2.1 操作流程概览 4.2.2 步骤一:查看周期任务配置 4.2.3 步骤二:测试周期任务 4.2.4 步骤三:周期任务补历史数据 4.2.5 步骤四:查看周期实例 4.2.6 步骤五:查看执…

knn图像分类

K近邻算法(K-NN),即给定一个已训练的数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,则判定该输入实例同属此类。 1. OpenCV K近邻模块的使用 接下来通过一个例子&…

掌握 Nuxt 3 的页面元数据:使用 definePageMeta 进行自定义配置

title: 掌握 Nuxt 3 的页面元数据:使用 definePageMeta 进行自定义配置 date: 2024/8/11 updated: 2024/8/11 author: cmdragon excerpt: 摘要:本文详细介绍Nuxt 3框架中definePageMeta的使用方法,包括如何为页面组件定义元数据&#xff0…

集合的框架(之一)

集合的含义: 集合是一个可变的容器,可以随时向集合中添加元素,也可以随时从集合中删除元素。另外,集合还提供了若干个用来操作集合中数据的方法。集合里的数据,我们称之为元素(elements);集合只能用来存储…

2025年美国数学竞赛AMC8暑期备考:吃透625道真题和知识点(持续)

距离接下来最近的2025年AMC8美国数学竞赛还有几个月的时间,实践证明,做真题,吃透真题和背后的知识点是备考AMC8有效的方法之一。 通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以…

1915_开源C语言实现的通用队列

经常在工作中遇到一些队列处理的场景,以前要么是借用FreeRTOS这样的系统中的相关功能,要么是通过数组做一个简单的队列模型。但是,这两种方案都具有一定的局限性能,前者要求的FreeRTOS不见得相应的软件中有,而后者只能…

超好玩的肉鸽游戏:《暴君的游戏》手机单机游戏分享

《暴君的游戏》(Despots Game)是一款结合了自走棋和roguelike元素的像素策略冒险游戏。游戏以其独特的战斗系统和丰富的职业选择,为玩家提供了深度的策略体验和探索乐趣。 游戏特色包括: 角色职业多样性:玩家可以招募…

使用历史版本比对法排查C++程序中的内存泄漏问题

目录 1、问题描述 2、使用Process Explorer实时查看程序的虚拟内存占用 2.1、对于内存泄漏问题,需要查看程序占用的虚拟内存 2.2、Windows任务管理器中看不到程序进程占用的虚拟内存,使用Process Explorer工具可以看到 2.3、通过Process Explorer工具看到每次泄漏的内存…

大数据-75 Kafka 高级特性 稳定性-一致性保证 LogAndOffset(LEO) HightWatermark(HW) 水位/水印

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

LVS实战项目

LVS简介 LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩,阿里的四层SLB(Server LoadBalance)是基于LVSkeepalived实现。 LVS集群的类型 lvs-nat : 修改请求报文的目标IP, 多目标 IP 的 DNAT lvs-dr &#xff…

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——6Resnet实现黑线识别

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——6Resnet实现黑线识别 ​ 比赛还有重要部分就是黑线的识别,这块地平线社区的帖子很多 ​ 在本次我就使用了社区吴超大佬写出的文章,当然我们的步骤有所不同,也是比较省…

黄牛杀手 抢票脚本 V3.0

黄牛杀手 抢票脚本 V3.0 介绍 现在黄牛太tm多了,根本抢不到票 为了解决这个问题,开发了这个脚本,支持大麦网,淘票票、缤玩岛等多个平台 依赖 selenium (4.10.0以下版本) pip install selenium 现在黄牛太tm多了,根…

2.类和对象(上)

1. 类的定义 1.1 类定义格式 • class为定义类的关键字,Stack为类的名字,{ }中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; (类和结构体非常像&#…

LVS原理——详细介绍

目录 lvs简介 LVS作用 LVS 的优势与不足 LVS概念与相关术语 LVS的3种工作模式 LVS调度算法 LVS-dr模式 LVS-tun模式 ipvsadm工具使用 lvs简介 LVS 是Linux Virtual Server的简称,也就是 Linux 虚拟服务器,是一个极好的负载均衡解决方案,它将一个…

计数排序,桶排序,基数排序

计数排序: 找出数据中的最大值和最小值,并创建哈希表,把 数据-最小值 作为数组的下标访问哈希表并标记数量,标记完后,遍历哈希表,当表中的值大于0,把 **下标最小值 (下标元素-最小值)**还原数据…