FFmpeg开发笔记(五十三)移动端的国产直播录制工具EasyPusher

news2024/11/17 21:52:39

EasyPusher是一款国产的RTSP直播录制推流客户端工具,它支持Windows、Linux、Android、iOS等操作系统。EasyPusher采用RTSP推流协议,其中安卓版EasyPusher的Github托管地址为https://github.com/EasyDarwin/EasyPusher-Android。
不过EasyPusher有好几年没更新了,尤其安卓版的EasyPusher仍在调用过时的support支持库,而非推出多年的AndroidX库。为了让EasyPusher-Android源码能够在最新的Android Studio上跑起来,需要对下载后的EasyPusher-Android源码进行若干改造。以下的改造内容基于Android Studio Dolphin(小海豚版本),详细的改造步骤说明如下。

1、升级编译的SDK版本

使用Android Studio Dolphin打开下载后的EasyPusher-Android项目,把模块build.gradle里面的compileSdkVersion和targetSdkVersion都从26改为28,因为小海豚版本的Android Studio最低支持到API28。

2、迁移到Androidx

上个步骤修改了模块build.gradle,单击“Sync Now”同步配置变动。等待同步完成,依次选择顶部菜单:Refactor→Migrate to AndroidX,表示把App工程迁移到AndroidX支持库,接着Android Studio就自动把App工程里的support库配置与相关类统统换成AndroidX的相应对象。

3、指定本地NDK的版本号

然后依次选择顶部菜单:Build→Make Project,发现App编译报错“No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi”,这是因为Android Studio没找到合适的NDK版本。解决办法是在配置文件中指定本地NDK的版本号(注意事先在SDK Manager中勾选对应版本的ndk,具体参见《FFmpeg开发实战:从零基础到短视频上线》一书第12章的“12.1.1  搭建Android的NDK开发环境”),打开模块build.gradle,把下面这行

    buildToolsVersion '28.0.3'

改为下面这行

    //buildToolsVersion '28.0.3'
    ndkVersion '21.4.7075529' // 这里的ndkVersion改为自己电脑上的ndk版本号

接着单击“Sync Now”同步配置变动。

4、升级App工程的Gradle版本号

然后依次选择顶部菜单:Build→Make Project,发现App编译报错“java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException”,这是因为EasyPusher-Android默认的Gradle版本太低。解决办法是升级EasyPusher-Android项目的Gradle版本号,先把gradle/wrapper/gradle-wrapper.properties里的distributionUrl值改为下面这个:

https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip

再把项目级别build.gradle里面的节点路径buildscript→dependencies→classpath值改为下面这个:

'com.android.tools.build:gradle:4.2.1'

接着单击“Sync Now”同步配置变动。

5、编译并运行EasyPusher-Android

然后依次选择顶部菜单:Build→Make Project,等待编译通过后依次选择顶部菜单:Run→Run 'app',在调试的真机上即可看到EasyPusher-Android的App界面如下图所示。

点击App界面右下角的设置按钮,打开设置页面如下图所示,注意修改上方编辑框中的服务端推流地址,比如rtsp://124.70.***.***/live/test。

注意,由于EasyPusher仅支持RTSP推流,不支持RTMP等其他推流协议,因此上面只能填写RTSP推流链接。至于服务端的流媒体服务器,可采用ZLMediaKit,有关ZLMediaKit的使用说明详见之前的文章《Linux环境安装ZLMediaKit实现视频推流》。

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DAG路径搜索优化性能提高百倍

问题描述&#xff1a; 从一个DAG图中给定的起点 begin_line 寻找一条路径到达给定的终点 end_line。 图的拓扑关系由 top 这个映射&#xff08;map<int64, vector<int64>>&#xff09;表示&#xff0c;每条边都有一个或多个邻接的后继。begin_line 和 end_line 都…

javax.imageio.IIOException: Not a JPEG file: starts with 0xff 0xd9

目录 问题描述&#xff1a; 解决思路&#xff1a; 问题出现的原因&#xff1a; 解决方法&#xff1a; 问题描述&#xff1a; 最近在用java做一个上传图像识别文字的功能&#xff0c;上传图像后报错。 接口返回&#xff1a; {"code": 500,"success":…

滚动懒加载升级版:添加滚动回收策略

在之前的1.0版本的基础上&#xff0c;添加滚动回收策略&#xff0c;保持页面只保留固定数量的数据&#xff0c;优化渲染 否则一直往数组里push内容&#xff0c;当数组长度过大&#xff0c;可能页面会崩溃&#xff08;本需求是日志列表&#xff0c;由于日志数据可能会非常庞大&…

C++入门基础知识41——【关于C++ 运算符——杂项运算符】

成长路上不孤单&#x1f60a;【14后&#xff0c;C爱好者&#xff0c;持续分享所学&#xff0c;如有需要欢迎收藏转发&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#xff01;&#xff01;&#xff01;&#xff01;&#xff…

URP custompasscustom render objects

https://dbbh666.blog.csdn.net/article/details/141296728?spm1001.2014.3001.5502 上一次 custom render pass的时候&#xff0c;直接是quad的渲染&#xff0c;如果想把任意对象绘制到FBO怎么写呢 参考这两个高手的文章&#xff0c;总结一下 https://www.bilibili.com/read…

换毛季猫咪化身掉毛怪,宠物浮毛如何清理?推荐用宠物空气净化器

我家现在有三只毛孩子&#xff0c;养宠的幸福是三倍&#xff0c;除毛的烦恼也是三倍。尤其还有两只是银渐层&#xff0c;掉毛量实在是太夸张了&#xff0c;衣服、地板、水杯家里到处都是。我也每天早晚都给它们梳毛&#xff0c;卫生也定期清理&#xff0c;可还是浮毛满天飞。 …

【前缀和】--- 初阶题目赏析

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey 了解完一维和二维前缀和模板之后&#xff0c;我们来看几道题目感受前缀和的算法原理以及使用场景。 &#x1f3e0; 寻找数组的中心下标 &am…

多张图片拼接在线制作难吗?学会这招让拼接变得很简单

你是否曾遇到过这样的困境&#xff1f;手机里的照片堆积如山&#xff0c;想要在社交平台上分享&#xff0c;却发现限制多多&#xff0c;根本没办法一次性分享完所有的精彩瞬间。这真是让人既兴奋又苦恼的事情啊&#xff01; 记得上次旅行回来&#xff0c;我拍了一大堆照片&…

精益生产管理咨询师OS:我需要时间!!!

最近一位企业的老板和我聊起管理企业的问题&#xff1a;之前听说精益生产管理不错&#xff0c;就试着在企业推行精益生产管理&#xff0c;结果精益培训搞了一个多月, 课上完了,可总是感觉精益并没有在企业落地,反倒感觉越来越越迷茫了。还抱怨说请精益生产管理咨询师花了很多钱…

AI智能对话绘画二合一系统源码 输入文字就可以快速生成高清图片 带源代码包以及搭建部署教程

系统概述 AI 智能对话绘画二合一系统源码是一款集智能对话与绘画功能于一体的先进系统。它融合了人工智能、计算机视觉等多项技术&#xff0c;能够实现自然语言处理与图像生成的高度协同。 该系统通过对大量文本和图像数据的学习与训练&#xff0c;具备了理解用户意图、生成相…

智游剪辑1.7.0 发布

最近又简单给桌面版升级了一下&#xff0c;一起来看看有啥新功能吧 支持实时输出 之前的文字类功能一般都需要等一会才能给出完整结果&#xff0c;现在它支持实时显示输出结果了&#xff0c;不仅输出更快了&#xff0c;而且还可以实时看到效果 字幕生成功能优化 旧版的字幕生…

vscode开发uniapp项目教程

一&#xff0c;在HB编辑器中用命令行创建uniapp项目&#xff08;vitevue3TS) npx degit dcloudio/uni-preset-vue#vite-ts 项目名称注意&#xff1a;搭梯子在创建或者连手机网络创建&#xff0c;按官方提示的下载模板也行。 在HB编辑器中安装vue3插件 二&#xff0c;在vscod…

抽烟检测算法引领公共场所健康管理的未来抽烟检测算法方案源码

在现代社会&#xff0c;吸烟对公共健康的影响越来越受到关注。为应对这一挑战&#xff0c;智能抽烟检测算法作为一种前沿技术&#xff0c;正逐渐成为公共场所健康管理的得力助手。这些算法通过先进的计算机视觉和深度学习技术&#xff0c;能够实时监控和识别吸烟行为&#xff0…

Linux基础1-基本指令5(more,less,head,tail, | ,find)

本章继续整理其他linux基本指令 一.本章重点 1.more和less命令查看大文本 2.head和tail命令查看小文本和日志 3.使用管道多次处理信息 4.find指令 二.more和less more命令和less命令常用来查看大文本&#xff0c;其中less可以使用上下键快速浏览文本 使用方式 more文件 …

若依ruoyi-vue部署在子域名下(做为子应用)

若依ruoyi-vue部署在子域名下&#xff08;做为子应用&#xff09; 特殊情况需要部署到子路径下&#xff08;做为子应用&#xff09; 文章目录 若依ruoyi-vue部署在子域名下&#xff08;做为子应用&#xff09;一、vue.config.js二、router/index.js三、Navbar.vue四、request.j…

通过查找真实IP bypass WAF

当已知某站存在漏洞时&#xff0c;Web 应用程序防火墙&#xff08;简称WAF&#xff09;是最大的阻碍。通常&#xff0c;这些网站都很老旧&#xff0c;维护得不是很好&#xff0c;因此在大多数情况下&#xff0c;将 WAF 放在它们之上会更容易。有一种方法可以绕过这一层保护&…

【软件文档】软件质量保证计划书(Word完整版)

1 概述 2 质量目标 3 项目基本情况 4 资源 4.1 人员 4.1.1 组织结构 4.1.2 职责 4.2 工具及设施 5 质量保证的主要工作 6 质量保证工作量估算 7 质量保证工作提交的产物 8 变更管理 9 评价标准 10 形成的记录 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;…

想了解前端开发神器MemFire Cloud,这一文就搞定

在如今这个快速变化的开发世界里&#xff0c;谁不想拥有一款能够极大提升效率的开发神器&#xff1f;如果你也是一个想在开发路上少走弯路的程序员&#xff0c;那你一定要了解一下 MemFire Cloud。这款专为“懒人开发者”准备的全能工具&#xff0c;凭借其便捷的操作和强大的功…

ESP32-C3在MQTT访问时出现“Last error code reported from esp-tls: 0x8001”和问题的分析(5)

接前一篇文章:ESP32-C3在MQTT访问时出现“Last error code reported from esp-tls: 0x8001”和问题的分析(4) 前几篇文章分析了笔者在调试测试MQTT时所遇到的“Last error code reported from esp-tls: 0x8001”的问题。实际上笔者在实际测试时发现,还有另外一种错误情况,…

关于Claude Artifacts的5条总结!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…