惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
博客园 - 叶小钗
Blog — PlanetScale
Blog — PlanetScale
Microsoft Azure Blog
Microsoft Azure Blog
Vercel News
Vercel News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
A
About on SuperTechFans
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
阮一峰的网络日志
阮一峰的网络日志
D
Docker
Jina AI
Jina AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The Register - Security
The Register - Security
J
Java Code Geeks
S
SegmentFault 最新的问题
月光博客
月光博客
G
Google Developers Blog
美团技术团队
Last Week in AI
Last Week in AI
L
LangChain Blog
Apple Machine Learning Research
Apple Machine Learning Research
T
The Blog of Author Tim Ferriss
腾讯CDC
Recent Announcements
Recent Announcements
Recorded Future
Recorded Future
The Cloudflare Blog
有赞技术团队
有赞技术团队
博客园_首页
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
B
Blog
I
InfoQ
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
F
Fortinet All Blogs
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Security Blog
Microsoft Security Blog
MongoDB | Blog
MongoDB | Blog
爱范儿
爱范儿
D
DataBreaches.Net
F
Full Disclosure
M
MIT News - Artificial intelligence
博客园 - 司徒正美
H
Help Net Security

博客园 - aqi00

15天学会AI应用开发(十六)LangChain实现对话记忆功能 15天学会AI应用开发(十五)使用LangChain封装AI执行链 15天学会AI应用开发(十四)搭建LangChain的开发环境 15天学会AI应用开发(十三)上下文与RAG的阶段性总结 15天学会AI应用开发(十二)从PDF、WORD、网页构建RAG 15天学会AI应用开发(十一)从TXT文件构建RAG知识库 15天学会AI应用开发(十)把文本嵌入模型换成国产模型 15天学会AI应用开发(九)利用Chroma持久化向量数据 15天学会AI应用开发(八)使用向量数据库实现RAG功能 15天学会AI应用开发(七)有了大模型为什么还要引入RAG 15天学会AI应用开发(六)使用离线大模型对文本生成摘要 一文速览 HarmonyOS 6.1.1 推出的十个新特性 15天学会AI应用开发(五)使用AI摘要来压缩上下文消息 15天学会AI应用开发(四)根据Token长度截断历史对话 15天学会AI应用开发(三)把历史对话作为提示词会怎样 15天学会AI应用开发(二)为什么编写提示词这么重要 15天学会AI应用开发(一)搭建AI大模型应用开发环境 一文理清 HarmonyOS 6.0.2 涵盖的十个升级点 FFmpeg开发笔记(一百零二)国产的音视频移动开源工具FFmpegAndroid FFmpeg开发笔记(一百零一)跨平台的开源音视频移动框架MobileFFmpeg 一文速览 HarmonyOS 6.0.1 引入的十个新特性 一文读懂 HarmonyOS 6.1 带来的十大重要升级 新书《鸿蒙HarmonyOS 6应用开发:从零基础到App上线》出版啦 FFmpeg开发笔记(一百)国产的Android开源视频压缩工具VideoSlimmer FFmpeg开发笔记(九十九)基于Kotlin的国产开源播放器DKVideoPlayer FFmpeg开发笔记(九十八)基于FFmpeg的跨平台图形用户界面LosslessCut FFmpeg开发笔记(九十七)国产的开源视频剪辑工具AndroidVideoEditor FFmpeg开发笔记(九十六)采用Kotlin+Compose的视频编辑器OpenVideoEditor FFmpeg开发笔记(九十五)国产的开源视频美颜工具VideoEditorForAndroid FFmpeg开发笔记(九十三)国产的Android开源视频编辑器EpMedia FFmpeg开发笔记(九十二)基于Kotlin的开源Android推流器StreamPack FFmpeg开发笔记(九十一)基于Kotlin的Android直播开源框架RootEncoder FFmpeg开发笔记(九十)采用FFmpeg套壳的音视频转码百宝箱FFBox FFmpeg开发笔记(八十九)基于FFmpeg的直播视频录制工具StreamCap FFmpeg开发笔记(八十八)基于Compose的国产电视直播开源框架MyTV FFmpeg开发笔记(八十七)采用Kotlin的手机开源播放器VLC-Android FFmpeg开发笔记(八十六)基于Node.js的国产视频编辑开源框架OpenCut FFmpeg开发笔记(八十五)基于PyQt和FFmpeg的开源视频剪辑器OpenShot FFmpeg开发笔记(八十四)使用国产的librestreaming实现RTMP直播 FFmpeg开发笔记(八十三)国产的视频裁剪框架AndroidVideoTrimmer FFmpeg开发笔记(八十二)使用国产直播服务器smart_rtmpd执行推流操作
FFmpeg开发笔记(九十四)基于Kotlin的国产开源推拉流框架anyRTC
aqi00 · 2025-12-14 · via 博客园 - aqi00

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

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

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,把下面这行

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

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

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

因为实测发现编译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,把下面这行代码

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

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

anyrtc1

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

anyrtc2

在推流之前,得先输入流媒体服务器的推流地址。为此按照《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2.2  FFmpeg向网络推流”说明,在电脑上启动MediaMTX,并通过命令“ipconfig /all”找到电脑位于WiFi的局域网IP。
确保手机和电脑连接了同一个WiFi,再往anyRTC的推流界面填上MediaMTX的完整推流地址如“rtmp://192.168.*.*:1935/stream”,接着点击【开始推流】按钮,打开推流预览界面如下图所示。

anyrtc3

点击左上角的翻转按钮可切换前后摄像头,点击麦克风按钮可开关声音,可见anyRTC正在把摄像头采集到的视频数据向MediaMTX推流。
然后另一部手机点击App界面上的【直播拉流】区域,打开拉流页面如下图所示:

anyrtc4

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

anyrtc5

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

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