FFmpeg开发笔记(三十一)使用RTMP Streamer开启APP直播推流

RTMP Streamer是一个安卓手机端的开源RTMP直播推流框架,可用于RTMP直播和RTSP直播,其升级版还支持SRT直播(腾讯视频云就采用SRT协议)。RTMP Streamer支持的视频编码包括H264、H265、AV1等等,支持的音频编码包括AAC、G711、OPUS等等,可谓功能强大的APP直播框架。

由于升级版的RTMP Streamer采取全Kotlin编码,对运行环境与开发者的技能要求都比较高,因此为了方便讲解,这里以标准版的RTMP Streamer为例,介绍如何使用RTMP Streamer开启手机的APP直播推流。

一、下载RTMP Streamer

由于最新版的RTMP Streamer被升级得面目全非,难以为国内开发者使用,并且RTMP Streamer升级之后,原本在Github上托管的旧代码也不翼而飞,不知是不是老外对我们封锁高科技。因此博主寻寻觅觅,花了好长时间才找到合适版本的RTMP Streamer源码,如果大家需要这套源码,可在京东自营购买《FFmpeg开发实战:从零基础到短视频上线》一书,并发表好评后加群 797800120 ,联系群主获取RTMP Streamer源码。
博主找到的RTMP Streamer源码采用Java编写,非Kotlin编写,可使用小海豚版本的AS打开。所以需要先安装小海豚版本的AS,也就是Android Studio Dolphin,该版本AS的下载地址为 https://redirector.gvt1.com/edgedl/android/studio/install/2021.3.1.16/android-studio-2021.3.1.16-windows.exe 。

二、加载RTMP Streamer

下载的RTMP Streamer源码是个完整的AS项目,启动小海豚版本的Android Studio,依次选择菜单:File→Open,在弹出的文件对话框中选择解压后的RTMP Streamer源码目录。Android Studio就开始自动下载相关组件,并执行gradle同步等操作。为了加快RTMP 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/'}

增加以上配置的目的是引入国内的仓库地址,以便加快相关依赖包的下载速度。
等待RTMP Streamer项目成功加载完毕,查看Android Studio左侧的导航图,可见RTMP Streamer项目由下列五个模块组成:
app模块:这是RTMP Streamer的演示界面模块,也是APP工程的主入口。
encoder模块:这是RTMP Streamer给音频流和视频流分别编码的模块。
rtmp模块:这是RTMP Streamer处理RTMP协议通信的模块。
rtplibrary模块:这是处理RTP协议数据传输的公共库,rtmp模块和rtsp模块都调到了该库。
rtsp模块:这是RTMP Streamer处理RTSP协议通信的模块。

三、启动RTMP Streamer

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

可见RTMP Streamer提供了丰富多样的直播形式,既可以通过手机摄像头直播,还能把手机上的视频文件分享直播,还能对手机的屏幕操作进行直播。具体的直播协议又包括RTMP和RTSP两种,可以满足绝大多数场景的直播需求,而且RTMP Streamer是个开源软件,提供了完整的APP直播录制全套代码,非常适合开发者学习和研究。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何从清空的回收站中恢复已删除的Excel文件?

“嗨,几天前我删除了很多没有备份的Excel文件。回收站已清空。当我意识到我犯了一个大错误时,所有的Excel文件都消失了,回收站里什么都没有。清空回收站后是否可以恢复已删除的 Excel 文件? 回收站是一种工具,可让您在…

爬山算法教程(个人总结版)

背景与简介 爬山算法(Hill Climbing Algorithm)是一种用于解决优化问题的启发式搜索方法。它是一种局部搜索算法,通过不断尝试从当前解出发,在其邻域内寻找更优的解,直到无法找到更优解为止。该算法得名于其类似于登山…

FullCalendar日历组件集成实战(7)

背景 有一些应用系统或应用功能,如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件,但功能比较简单,用来做数据展现勉强可用。但如果需要进行复杂的数据展示,以及互动操作如通过点击添加事件&#xff0…

java调用科大讯飞在线语音合成API --内附完整项目

科大讯飞语音开放平台基础环境搭建 1.用户注册 注册科大讯飞开放平台账号 2.注册好后先创建一个自己的应用 创建完成后进入应用可以看到我们开发需要的三个参数:APPID,APISecret,APIKey 3.因为平台提供的SDK中只支持了简单的中英两种语言语音…

C语言 | Leetcode C语言题解之第114题二叉树展开为链表

题目: 题解: void flatten(struct TreeNode* root) {struct TreeNode* curr root;while (curr ! NULL) {if (curr->left ! NULL) {struct TreeNode* next curr->left;struct TreeNode* predecessor next;while (predecessor->right ! NULL)…

KingbaseES数据库merge语法

数据库版本:KingbaseES V008R006C008B0014 简介 MERGE 语句是一种用于数据操作的 SQL 语句,它能够根据指定的条件将 INSERT、UPDATE 和 DELETE 操作结合到单个语句中。其主要作用是在目标表和源表之间进行数据比较和同步,根据条件的匹配情况来…

Jmeter插件下载(下载和使用教程)

插件管理器:plugins-manager下载安装和使用 下载: 官网地址:https://jmeter-plugins.org/install/Install/ 步骤1:将下载jmeter-plugins-manager-1.10.jar放到目录apache-jmeter-5.1.1\lib\ext,如下图 步骤2&#x…

安卓开发:相机水印设置

1.更新水印 DecimalFormat DF new DecimalFormat("#"); DecimalFormat DF1 new DecimalFormat("#.#");LocationManager LM (LocationManager)getSystemService(Context.LOCATION_SERVICE); LM.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2…

C++的数论相关算法

数论是数学的一个分支,主要研究整数的性质和关系。在计算机科学中,数论算法对于密码学、优化问题和算法分析等方面都具有重要作用。C作为一种高效的编程语言,非常适合用来实现这些算法。下面我们将介绍几个C中的数论相关算法,包括…

如何学习计算机网络(超详细,方法论)

分享一下学习计算机网络的方法论 首先是看视频: 这里我推荐中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版》课程 课程目标_哔哩哔哩_bilibili 教材采用神书《计算机网络(自顶向下方法)》,授课风格更偏向实…

Linux基础 (十):Linux 信号的使用

目录 一、信号的基本概念 二、信号处理常见方式概览 三、修改信号的响应方式 – signal() 3.1 简单复习结束前台进程 3.2 改变SIGINT信号的响应方式 3.3 自定义方式改变进程对信号的响应 3.4 进程对信号作出两种响应 四、发送信号 – kill() 五、利用信号解决僵死进程…

全球点赞最高的人颜廷利:真正的人生目标是什么

在那个充满生机的2024年春天,记者有幸对中国第一起名大师的老师颜廷利教授进行了深入的访谈。带着对其人生哲学的强烈好奇,记者紧张而期待地提出了问题:“颜教授,您在漫长的人生旅途中最追求的是什么?” 宁夏银川、山东…

从容应对亿级QPS访问,Redis还缺少什么?no.29

众所周知,Redis 在线上实际运行时,面对海量数据、高并发访问,会遇到不少问题,需要进行针对性扩展及优化。本课时,我会结合微博在使用 Redis 中遇到的问题,来分析如何在生产环境下对 Redis 进行扩展改造&…

IT廉连看——UniApp——条件渲染

IT廉连看——UniApp——条件渲染 什么是条件渲染? 顾名思义,满足一定的条件他才会进行渲染。 这是我们上节事件绑定保留的代码。 一、现在我有这样一个需求: 增加一个按钮,当我点击这个按钮,这里的文本&#xff0…

2024年上半年系统架构设计师真题-复原程度90%

前言 此次考试监考特别严格,草稿纸不允许带出考场,并且准考证上不允许任何写画,甚至连笔都允许带一支,所以下面的相关题目都是参考一些群友的提供,加上自己的记忆回顾,得到的结果。 其中综合知识部分的题…

NASA数据集——阿尔法喷气式大气实验二氧化碳和甲烷数据

Alpha Jet Atmospheric eXperiment Carbon Dioxide and Methane Data 阿尔法喷气式大气实验二氧化碳和甲烷数据 简介 Alpha Jet Atmospheric eXperiment (AJAX) 是美国国家航空航天局艾姆斯研究中心与 H211, L.L.C. 公司的合作项目,旨在促进对加利福尼亚、内华达…

android_binder源码分析之_binder驱动使用服务

一,binder驱动源码分析,使用服务过程 uint32_t svcmgr_lookup(struct binder_state *bs, uint32_t target, const char *name) {uint32_t handle;unsigned iodata[512/4];struct binder_io msg, reply;bio_init(&msg, iodata, sizeof(iodata), 4);b…

Layui设置table表格中时间的显示格式

1、问题概述? 【数据库中的时间格式】 【Layui中table表格默认的显示格式】 默认的格式中会显示时间的毫秒单位,但是这个毫秒有时候是不需要的。 总结:这个时候我们就需要定义table表格中的时间显示格式。 2、解决办法? 【解决后时间的显示格式】 【解决办法1:通过字符…

mvc的常见注解

问文心一言的,记录一下。 PathVariable 路径变量注解 PathVariable 是 Spring MVC 提供的一个注解,它用于从 URI 模板变量中绑定值到控制器方法的参数上。当你在 RequestMapping、GetMapping、PostMapping、PutMapping、DeleteMapping 等注解的 URL 路…

企业档案管理系统软件都有哪些分类

企业档案管理系统软件可以根据其功能和特点进行分类。以下是一些常见的分类: 1. 全能类档案管理系统:提供文件存储和检索功能,并支持多种文件类型和格式的管理,如文本文件、图像文件、音频文件等。 2. 电子档案管理系统&#xff1…