FFmpeg开发笔记(九十四)基于Kotlin的国产开源推拉流框架anyRTC

《FFmpeg开发实战:从零基础到短视频上线》一书的"10.2.2 FFmpeg向网络推流"介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。可是在此之前,得先有一个推流工具向MediaMTX推送视频流,这样末端的拉流程序才能从MediaMTX源源不断地拉取视频流。那么Android手机可使用anyRTC从摄像头实时采集视频信号,并向后端的MediaMTX持续推送视频数据。

anyRTC是一款基于Android的实时滤镜RTMP推流库,它使用MediaCodec的API进行视频和音频编码,并使用librtmp库执行rtmp流式传输。此外,anyRTC还提供了在摄像头捕捉阶段之后和编码阶段之前实时视频滤镜的功能。

anyRTC的官网为https://www.anyrtc.io/,源码托管地址为https://github.com/anyrtcIO-Community/anyRTC-RTMP-OpenSource(星星数4.9k),国内的镜像地址为https://gitcode.com/gh_mirrors/any/anyRTC-RTMP-OpenSource,该框架的最后更新时间为2023年12月,可见它的更新十分及时。

anyLive是anyRTC开源的推拉流项目,它采用跨平台架构设计(采用WebRTC(93)版本为基础框架),一套代码支持Android、iOS、Windows、Mac、Ubuntu等平台。anyRTC支持的流媒体协议包括rtmp、http/https、rtsp、hls、m3u8、mkv、mp3、mp4等,引用的第三方库包括libfaac 1.28、libfaad2 2.7、ffmpeg 4.3、libsrtp、libvpx等等。

其中Android版本的anyRTC位于源码包的Prj-Android目录,Prj-Android工程基于Kotlin+Compose编码,最低支持到Android4.4,并采用Android 12.0编译,具有很高的学习和研究价值。并且通过小海豚版本的Android Studio Dolphin即可打开Prj-Android工程,可谓十分方便。

这里以Android Studio Dolphin(小海豚版本)为例,介绍如何在App工程中导入并编译anyRTC,详细的操作步骤如下。

一、修改案例工程的Gradle版本

打开Prj-Android/gradle/wrapper/gradle-wrapper.properties,把下面这行

复制代码
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip

改成下面这行,也就是把Gradle7.0.2升级级到7.2。

复制代码
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip

二、修改模块级别的build.gradle

打开Prj-Android/liveplayer/build.gradle,注释掉下面的ndkVersion这行:

复制代码
ndkVersion '20.0.5594570'

因为实测发现编译Prj-Android项目采用android-ndk-r18b版本即可。

三、导入编译好的so文件

到这里下载压缩包https://storage.agrtc.cn:1000/share/0v2et4RX,解压后将lib文件夹放到Prj-Android/liveplayer/src/main/cpp目录下,再使用小海豚版本的Android Studio Dolphin打开Prj-Android项目。

四、修改默认的拉流地址

打开Prj-Android项目的app\src\main\java\io\anyrtc\liveplayer\PullActivity.kt,把下面这行代码

复制代码
go(PullActivity::class.java, Pair("url",VIDEO_1))

改成下面这行,也就是把拉流地址改为用户输入的直播链接:

复制代码
go(PullActivity::class.java, Pair("url",binding.etUrl.text.toString()))

以上几个步骤的修改之后,编译运行anyRTC的App工程,在真机上看到的anyRTC初始界面如下图所示。

可见anyRTC既支持向服务器推流,也支持从服务器拉流。那么准备两部安卓手机,一部用于推流,另一部用于拉流。用于推流的手机点击App界面上的【直播推流】区域,打开推流页面如下图所示:

在推流之前,得先输入流媒体服务器的推流地址。为此按照《FFmpeg开发实战:从零基础到短视频上线》一书的"10.2.2 FFmpeg向网络推流"说明,在电脑上启动MediaMTX,并通过命令"ipconfig /all"找到电脑位于WiFi的局域网IP。

确保手机和电脑连接了同一个WiFi,再往anyRTC的推流界面填上MediaMTX的完整推流地址如"rtmp://192.168.*.*:1935/stream",接着点击【开始推流】按钮,打开推流预览界面如下图所示。

点击左上角的翻转按钮可切换前后摄像头,点击麦克风按钮可开关声音,可见anyRTC正在把摄像头采集到的视频数据向MediaMTX推流。

然后另一部手机点击App界面上的【直播拉流】区域,打开拉流页面如下图所示:

在拉流页面中输入对应的MediaMTX拉流地址"rtmp://192.168.*.*:1935/stream",接着点击页面下方的【开始播放】按钮,此时anyRTC就自动播放来自拉流地址的视频画面如下图所示。

对比anyRTC的推流预览界面和拉流播放界面,可知一部手机摄像头采集到的视频信号正确传送给了另一部手机。

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

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

相关推荐
晚霞的不甘1 天前
CANN 编译器深度解析:TBE 自定义算子开发实战
人工智能·架构·开源·音视频
愚公搬代码1 天前
【愚公系列】《AI短视频创作一本通》016-AI短视频的生成(AI短视频运镜方法)
人工智能·音视频
独行soc1 天前
2026年渗透测试面试题总结-18(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
王码码20351 天前
Flutter for OpenHarmony 实战之基础组件:第二十七篇 BottomSheet — 动态底部弹窗与底部栏菜单
android·flutter·harmonyos
2501_915106321 天前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview
那个村的李富贵1 天前
CANN赋能AIGC“数字人”革命:实时视频换脸与表情驱动实战
aigc·音视频
晚霞的不甘1 天前
CANN 支持强化学习:从 Isaac Gym 仿真到机械臂真机控制
人工智能·神经网络·架构·开源·音视频
vistaup1 天前
OKHTTP 默认构建包含 android 4.4 的TLS 1.2 以及设备时间不对兼容
android·okhttp
常利兵1 天前
ButterKnife在Android 35 + Gradle 8.+环境下的适配困境与现代化迁移指南
android
撩得Android一次心动1 天前
Android LiveData 全面解析:使用Java构建响应式UI【源码篇】
android·java·android jetpack·livedata