当前位置: 首页 > news >正文

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

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

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初始界面如下图所示。

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

 
http://www.gsyq.cn/news/97518.html

相关文章:

  • Codex 闭环已成:OpenAI 悄然跨越“奇点”,人类程序员正式交出方向盘
  • Windows系统HEVC解码插件完整安装指南
  • 贴吧Lite:重新定义轻量级贴吧体验的终极指南
  • nats client_advertise advertise cluster_advertise 参数
  • 快速掌握AI提示词测试:5步构建自动化评估工作流
  • 百度Qianfan-VL全尺寸开源:重塑企业级多模态应用新范式
  • 2025年有实力柱式传感器/动态扭矩传感器热门厂家推荐榜单 - 品牌宣传支持者
  • C语言编译过程 ELF文件加载过程解析
  • 5步轻松搞定AppSmith实时推送:告别消息延迟的终极指南
  • 终极手绘风格组件库:wired-elements完全使用指南
  • 论文解读|将1930年前所有阿拉伯期刊添加到Wikidata——学术众包项目Jarāʾid向数字公共领域的迁移
  • 掌握计算机视觉核心:多视图几何完整指南
  • 如何通过API密钥轮询机制实现负载均衡与系统稳定性提升
  • 通达信金多宝KDJ
  • 1Panel多服务器并发管理实战:告别繁琐手工操作
  • Varia下载管理器完整使用指南
  • Bosque语言:下一代编程范式的开发体验革命
  • 通达信智能kdj 源码
  • 2025年知名的三轴振动台厂家最新热销排行 - 品牌宣传支持者
  • DeepSeek-R1:开源大模型推理革命,6710亿参数如何重塑行业格局
  • ⭐力扣刷题:螺旋矩阵
  • 5步掌握Loco+Tauri:构建高性能跨平台桌面应用的终极指南
  • Armbian嵌入式音频系统:从硬件驱动到应用层的完整解决方案
  • 《极品家丁七改版》终极珍藏完整版:一键下载无雷精校全本资源
  • unique_ptr::release
  • Lucy Edit AI:用文字重新定义视频编辑的智能革命
  • 终极邮件编辑器:轻松拖拽,快速打造专业级邮件
  • Qwen3-VL本地部署实战:解锁PC端多模态AI视觉理解能力
  • 2025年热门的事件相机技术厂家选购指南与推荐 - 品牌宣传支持者
  • 终极WPF界面美化指南:HandyControl控件库完全实战