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

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开发实战:从零基础到短视频上线》一书。

本系列的FFmpeg进阶文章目录为《FFmpeg开发笔记全目录(FFmpeg开发实战详解,含直播系统的搭建过程)》

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

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

相关文章

第三期书生大模型实战营 第2关 Python 基础知识

第三期书生大模型实战营 第2关 Python 基础知识 第三期书生大模型实战营 第2关 Python 基础知识Python 基础函数定义常见的内置方法replace(old, new)lower()split() 字典dict 使用Python实现词频统计使用VSCode进行调试总结 第三期书生大模型实战营 第2关 Python 基础知识 Hel…

详细分析Java中的@EventListener事件监听器(附Demo)

目录 前言1. 基本知识2. Demo 前言 Java的基本知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)Spring框架从入门到学精(全) 1. 基本知识 用于标注一个方法为事件监听器 事件监听器方…

ArduPilot开源飞控之AP_Mount_Siyi

ArduPilot开源飞控之AP_Mount_Siyi 1. 源由2. 框架设计2.1 类和继承2.2 公共方法2.3 保护方法2.4 私有成员和方法2.5 解析状态2.6 重要成员变量 3. 重要方法3.1 AP_Mount_Siyi::init3.2 AP_Mount_Siyi::update3.3 AP_Mount_Siyi::read_incoming_packets3.4 AP_Mount_Siyi::proc…

哈斯机床采集数据

哈斯自身也有一套设备采集监控系统,但是软件和架构功能都比较老,再加上不能兼容其他数控系统,所以即使免费送给客户,客户的使用意愿也十分有限。 哈斯系统市面上常见就串口和网口两种形式。关于市面上机床采集的问题:网…

Bash ——shell

Bash作为用户与操作系统之间的接口,让用户通过命令行输入各种指令来控制和操作计算机系统。 shell的两种解释: 1.linux命令解释器 Terminal 终端 ——》shell命令 ——》 Linux kernel (内核) Linux内核的作用: 1.…

15、电科院FTU检测标准学习笔记-基本性能

作者简介: 本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验 在配电自动化验收测试以及电科院测试中,本人全程参与,积累了不少现场的经验 ———————————————————…

简单状压dp(以力扣464为例)

目录 1.状态压缩dp是啥? 2.题目分析 3.解题思路 4.算法分析 5.代码分析 6.代码一览 7.结语 1.状态压缩dp是啥? 顾名思义,状态压缩dp就是将原本会超出内存限制的存储改用更加有效的存储方式。简而言之,就是压缩dp的空间。 …

jdk中自带的并发类

1、seamplore 信号量 countDownLaunch:等待所有线程都完成,主线程在执行 CyclicBarrirer 内存屏障 exchanger 线程之间交换数据 phaser 阶段协同器 阻塞队列

AWS-WAF-Log S3存放,通过Athena查看

1.创建好waf-cdn 并且设置好规则和log存储方式为s3 2. Amazon Athena 服务 使用 (注意s3桶位置相同得区域) https://docs.aws.amazon.com/zh_cn/athena/latest/ug/waf-logs.html#waf-example-count-matched-ip-addresses 官方文档参考,建一个分区查询表…

C. Earning on Bets

题目 个人补充&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 #define ll long longconst int maxn 1e6 5, in…

C语言 | Leetcode C语言题解之第228题汇总区间

题目&#xff1a; 题解&#xff1a; char** summaryRanges(int* nums, int numsSize, int* returnSize) {char** ret malloc(sizeof(char*) * numsSize);*returnSize 0;int i 0;while (i < numsSize) {int low i;i;while (i < numsSize && nums[i] nums[i …

算法通关:004_1选择排序

代码一定要自己手敲理解 public class _004 {//选择排序&#xff0c;冒泡排序&#xff0c;插入排序//交换public static void swap(int[] arr,int i ,int j){int temp arr[i];arr[i] arr[j];arr[j] temp;}//选择排序public static void selectSort(int[] arr){if(arr null…

YOLOv10改进 | Conv篇 | 利用FasterBlock二次创新C2f提出一种全新的结构(全网独家首发,参数量下降70W)

一、本文介绍 本文给大家带来的改进机制是利用FasterNet的FasterBlock改进特征提取网络&#xff0c;将其用来改进ResNet网络&#xff0c;其旨在提高计算速度而不牺牲准确性&#xff0c;特别是在视觉任务中。它通过一种称为部分卷积&#xff08;PConv&#xff09;的新技术来减少…

NLP入门——词袋语言模型的搭建、训练与预测

卷积语言模型实际上是取了句子最后ctx_len个词作为上下文输入模型来预测之后的分词。但更好的选择是我们做一个词袋&#xff0c;将所有分词装在词袋中作为上下文&#xff0c;这样预测的分词不只根据最后ctx_len个分词&#xff0c;而是整个词袋中的所有分词。 例如我们的序列是&…

javaweb图书商城系统带万字文档网上书城java项目java课程设计java毕业设计

文章目录 图书商城系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档&#xff08;9.9&#xffe5;带走&#xff09; 图书商城系统 一、项目演示 网上书城 二、项目介绍 语言&#xff1a;java 数据库&#xff1a;…

typora 两边太宽,设置宽度

步骤&#xff1a; 查看目前使用主题类型 文件 —> 偏好设置 —> 外观 —> 打开主题文件夹 修改对应的主题&#xff1a;max-width

MySQL 数据库支持存储emoji表情

当你通过node.js&#xff0c;往mysql存储emoji表情的时候&#xff0c;可能会遇到报错&#xff1a; code: ‘ER_TRUNCATED_WRONG_VALUE_FOR_FIELD’, errno: 1366, sqlMessage: “Incorrect string value: ‘\xF0\x9F\x8D\x94’ for column ‘nick_name’ at row 1”, sqlState…

MySQL数据库主从复制+mycat读写分离+MHA实操

目录 一、主从复制 1.1 主从复制简介 1.2 MySQL支持的复制类型 1.3 主从复制的工作过程 1.4 主从复制的同步模式 1.4.1 异步复制&#xff08;Asynchronous replication&#xff09; 1.4.2 全同步复制&#xff08;Fully synchronous replication&#xff09; 1.4.3 半同…

力扣2356.二维差分模板——子矩阵元素加1

力扣2356.二维差分模板——子矩阵元素加1 模板题 最后将n2*n2的矩阵删去周围一圈变成n*n矩阵的操作 class Solution {public:vector<vector<int>> rangeAddQueries(int n, vector<vector<int>>& queries) {vector<vector<int>> res…

【JavaWeb程序设计】Servlet(二)

目录 一、改进上一篇博客Servlet&#xff08;一&#xff09;的第一题 1. 运行截图 2. 建表 3. 实体类 4. JSP页面 4.1 login.jsp 4.2 loginSuccess.jsp 4.3 loginFail.jsp 5. mybatis-config.xml 6. 工具类&#xff1a;创建SqlSessionFactory实例&#xff0c;进行 My…