​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开发笔记(四十五)使用SRT Streamer开启APP直播推流的更多相关文章

  1. FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台

    FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待   前言   将ffmpeg移植到海思H ...

  2. 树莓派开发笔记(十五):树莓派4B+从源码编译安装mysql数据库

    前言   树莓派使用数据库时,优先选择sqlite数据库,但是sqlite是文件数据库同时仅针对于单用户的情况,考虑到多用户的情况,在树莓派上部署安装mysql服务,通过读写锁事务等使用,可以实现多进 ...

  3. Java开发学习(四十五)----MyBatisPlus查询语句之映射匹配兼容性

    1.映射匹配兼容性 我们已经能从表中查询出数据,并将数据封装到模型类中,这整个过程涉及到一张表和一个模型类: 之所以数据能够成功的从表中获取并封装到模型对象中,原因是表的字段列名和模型类的属性名一样. ...

  4. .Net开发笔记(十五) 基于“泵”的TCP通讯(接上篇)

    上一篇博客中说了基于“泵”的UDP通讯,附上了一个Demo,模拟飞鸽传书的功能,功能不太完善,主要是为了说明“泵”在编程中的应用.本篇文章我再附上一个关于TCP通讯的两个Demo,也都采用了“泵”模式 ...

  5. Java开发笔记(十五)短路逻辑运算的优势

    前面提到逻辑运算只能操作布尔变量,这其实是不严谨的,因为经过Java编程实现,会发现“&”.“|”.“^”这几个逻辑符号竟然可以对数字进行运算.譬如下面的代码就直接对数字分别开展了“与”.“或 ...

  6. 论文阅读笔记四十五:Region Proposal by Guided Anchoring(CVPR2019)

    论文原址:https://arxiv.org/abs/1901.03278 github:code will be available 摘要 区域anchor是现阶段目标检测方法的重要基石.大多数好的 ...

  7. FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  8. Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件

    前言   上一篇已经将himpp套入qt的基础上进行开发.那么qt中拿到frame则是很关键的交互,这是qt与海思可能编解码交叉开发的关键步骤.   受限制   因为直接配置sample的vi比较麻烦 ...

  9. FFmpeg开发笔记(四):ffmpeg解码的基本流程详解

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  10. FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放

    前言   ffmpeg播放rtsp网络流和摄像头流.   Demo   使用ffmpeg播放局域网rtsp1080p海康摄像头:延迟0.2s,存在马赛克     使用ffmpeg播放网络rtsp文件流 ...

随机推荐

  1. http请求方式-CloseableHttpClient

    http请求方式-CloseableHttpClient import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObjec ...

  2. radis简单学习笔记

    原来写接口只用了本机缓存cache 来学习一下radis,用法应该跟cache一样吧,为了配套负载均衡的多服务器是多个服务器都可以读取缓存 一.下载 找了好长时间 github有的时候能上有的时候就上 ...

  3. 深入了解身份认证和授权机制,看看API请求到底发生了什么?

    前段时间写了一篇基于.NetCore环境使用IdentityServer4为API接口鉴权的文章,更多的是从快速上手的角度描述了IdentityServer4的使用.后续使用过程中,自己有了一些其他想 ...

  4. 18-Docker资源限制

    背景 若容器使用的计算机资源不加限制,那么,可能会耗光整个计算机资源. 如代码里有bug,出现了死循环,且创建了很多线程. 在Docker中,可以使用Cgroup技术限制CPU.Block IO.RA ...

  5. 06-Linux用户和组管理

    关于用户和组的知识 家目录 用户都有家目录:root用户家目录为/root.其他用户的家目录在/home/,如user1的家目录为/home/user1 当我们创建用户时,系统就会自动创建该用户的家目 ...

  6. Xilinux PS与PL交互:裸机程序读写FPGA-REG

    背景 当时在搞ZYNQ驱动的时候,出于TDD的思想,从最简单的功能开始验证.因此就涉及到了下面的需求. PL侧会提供寄存器地址供PS端读写,这部分的寄存器在PL侧作为Avalon的IP,对PS端来说, ...

  7. Ubuntu 22.04单机部署K3s

    安装docker 从docker官网获取最新的一键安装脚本,安装docker运行环境 curl -fsSL https://get.docker.com -o get-docker.sh sudo s ...

  8. mobaXterm 查看密码

    参考:MobaXterm中密码的查看方式 检查是否把密码保存到了注册表中 然后从https://github.com/HyperSine/how-does-MobaXterm-encrypt-pass ...

  9. linux系统&自动清理日志实现脚本

    文章来源:https://blog.csdn.net/lakelise/article/details/93711932 编写清理脚本,添加到定时任务中:创建可执行文件cd /hometouch cl ...

  10. Netcode for Entities如何添加自定义序列化,让GhostField支持任意类型?以int3为例(1.2.3版本)

    一句话省流:很麻烦也很抽象,能用内置支持的类型就尽量用. 首先看文档.官方文档里一开头就列出了所有内置的支持的类型:Ghost Type Templates 其中Entity类型需要特别注意一下:在同 ...