Android平台RTMP推送模块的设计意义

news2024/9/29 9:31:06

为什么要做RTMP推送

RTMP是一种广泛使用的流媒体传输协议,它允许视频和音频数据在互联网上实时、高效地传输。实现RTMP推送功能,主要是为了满足以下需求:

  1. 实时性要求:RTMP协议具有低延迟的特点,适合用于需要实时交互的场景,如直播、视频会议等。通过RTMP推送,观众可以几乎实时地观看到主播的内容,增强用户体验。

  2. 兼容性考虑:RTMP协议已经被众多流媒体服务器和播放器所支持,具有较高的兼容性。使用RTMP推送,可以确保内容能够顺利地被不同的设备和平台所接收和播放。

  3. 稳定性与可靠性:RTMP协议在传输过程中会进行一定的错误控制和丢包重传,从而提高传输的稳定性和可靠性。这对于保证直播质量至关重要。

  4. 可扩展性:随着直播行业的不断发展,对推流技术的要求也越来越高。RTMP推送技术可以根据实际需求进行扩展和优化,以支持更高清、更低延迟的直播传输。

  5. 集成便利性:许多直播SDK都提供了RTMP推送的接口和示例代码,使得开发者能够相对容易地将RTMP推送功能集成到自己的应用中,降低了开发难度和成本。

如何实现Android平台RTMP推送模块对接

2005年,我们做Android平台RTMP推送模块的初衷,是为了满足传统行业如应急指挥、巡检等场景的低延迟视音频传输,达到远程指挥的目的。做好了RTMP推送模块,发现现有的RTMP播放都不足以满足我们毫秒级的延迟诉求,继续自研框架,做了RTMP的直播播放器。

本文以大牛直播SDK的Android平台RTMP直播推送模块为例。涵盖了准备工作、接口设计、数据对接、RTMP推送以及扩展功能等方面。

Android平台RTMP推送模块功能设计:

  • 音频编码:AAC/SPEEX;
  • 视频编码:H.264、H.265;
  • 推流协议:RTMP;
  • [音视频]支持纯音频/纯视频/音视频推送;
  • [摄像头]支持采集过程中,前后摄像头实时切换;
  • 支持帧率、关键帧间隔(GOP)、码率(bit-rate)设置;
  • 支持RTMP推送 live|record模式设置;
  • 支持前置摄像头镜像设置;
  • 支持软编码、特定机型硬编码;
  • 支持横屏、竖屏推送;
  • 支持Android屏幕采集推送;
  • 支持自建标准RTMP服务器或CDN;
  • 支持断网自动重连、网络状态回调;
  • 支持实时动态水印;
  • 支持实时快照;
  • 支持降噪处理、自动增益控制;
  • 支持外部编码前音视频数据对接;
  • 支持外部编码后音视频数据对接;
  • 支持RTMP扩展H.265(需设备支持H.265特定机型硬编码)和Enhanced RTMP;
  • 支持实时音量调节;
  • 支持扩展录像模块;
  • 支持Unity接口;
  • 支持H.264扩展SEI发送模块;
  • 支持Android 5.1及以上版本。
  1. 技术背景与功能特点
    • 跨平台支持:支持Windows、Linux(x64_64架构|aarch64)、Android、iOS平台。
    • 数据源支持:支持采集推送摄像头、屏幕、麦克风、扬声器数据,以及编码前、编码后的音视频数据对接。
    • 性能优异:配合SmartPlayer播放器,实现毫秒级延迟体验,满足多种行业使用场景。
  2. 准备工作
    • 权限配置:确保在Android项目中添加了必要的权限,如相机、麦克风等。
    • Gradle配置:配置32/64位库,指定需要构建的ABI(armeabi-v7a, arm64-v8a, x86, x86_64)。
    • 应用名称修改:在strings.xml中修改app_name以适配集成测试。
  3. 接口设计
    • 初始化推送实例SmartPublisherOpen接口用于初始化推送实例,可配置音频和视频选项。
    • 事件回调SetSmartPublisherEventCallbackV2设置事件回调,用于处理推送过程中的各种事件。
    • 编码设置:提供硬编码检测(H.264、H.265)和设置接口,如SetSmartPublisherVideoHWEncoderSetSmartPublisherVideoHevcHWEncoder
    • 数据对接:提供多种数据接口,如SmartPublisherOnCaptureVideoDataSmartPublisherOnYV12Data等,用于对接不同格式的音视频数据。
  4. 实时数据传递
    • 视频数据:支持YUV420SP/YUV420P/RGBA/ARGB等格式的编码前视频数据,以及H.264编码后的视频数据。
    • 音频数据:支持PCM、AAC/PCMA/PCMU/SPEEX等格式的音频数据。
    • 数据转换:提供数据转换接口,如SmartPublisherNV21ToI420Rotate,用于NV21到I420的转换并旋转。
  5. RTMP推送
    • 设置推送URL:通过SmartPublisherSetURL接口设置RTMP推送的URL。
    • 推送控制:提供startPushstopPush等接口控制推送的开始和停止。
  6. 扩展功能
    • 本地录像与快照:支持本地录像和快照功能,通过相关接口实现。
    • H.265与Enhanced RTMP支持:除了H.264外,还支持H.265编码和Enhanced RTMP扩展。
  7. 实现示例
    • Camera2对接示例:在onCreate方法中初始化SmartPublisherJniV2实例,并设置相关参数和回调。
    • 推送RTMP示例:展示了如何配置推送参数、设置硬编码、启动和停止推送等步骤。

总结

RTMP优势在于它能够提供低延迟的实时音视频传输,同时具有良好的跨平台支持,可以在不同的操作系统和设备上运行。这使得RTMP成为直播、视频会议、在线教育等领域中广泛使用的技术之一。RTMP推流技术以其低延迟、跨平台支持、稳定性和丰富的交互能力等特点,在实时音视频传输领域具有广泛的应用前景。随着技术的不断发展和完善,相信RTMP推流技术将会在未来的音视频传输领域发挥更加重要的作用。

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

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

相关文章

大数据毕业设计选题推荐-租房数据分析系统-Hive-Hadoop-Spark

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

LVS-DR实战案例,实现四层负载均衡

环境准备:三台虚拟机(NET模式或者桥接模式) 192.168.88.200 (web1)(安装nginx服务器作为测试) 192.168.88.201 (服务器)(用于部署lvs-dr) 192.168.88.202 (web2)…

Ubuntu20.04 安装汉语拼音后重启登入黑屏

在虚拟机上装了一个Ubuntu用来学C,默认没有安装中文输入。于是按照网上教程装了几个汉语包。切换输入法的时候突然死机,重启登入直接黑屏。百度后发现有不少老哥和我这个问题一模一样,按照他们的方法也终于整好了,虚惊一场。 解决…

axios proxy 和 httpsAgent 的使用差异案例详解

背景 因为 wadesk 开发了本地 http 服务,http 本地服务是运行在 electron-main 的纯 node 环境中的,这个之前探讨了 node 下怎么使用 fetch 时就提到了一个 https-proxy-agent 库,这次使用 axios,发现 axios 自带 proxy 配置项&a…

Ubuntu20.04中ros2 foxy版本安装gazebo,并运行小车运动demo

这里默认你安装好了ros2 foxy版本 sudo apt install gazebo11sudo apt install ros-foxy-gazebo-ros-pkgs建议把其他的包也安装了 sudo apt install ros-foxy-gazebo-*安装速度的话,比安装ros环境快多了。 此时,可以在/opt/ros/foxy/share目录下看到若…

NXP(恩智浦)—TJA1042TK/3 CAN收发器芯片详解

写在前面 本系列文章主要讲解NXP(恩智浦)—TJA1042TK/3 CAN收发器芯片的相关知识,希望能帮助更多的同学认识和了解NXP(恩智浦)—TTJA1042TK/3 CAN收发器芯片。 若有相关问题,欢迎评论沟通,共同…

大厂再侵美团腹地

美团在拿自己的生命线,来对抗大厂们的第二曲线。 转载:新熵 原创 作者丨茯神 编辑丨九犁 中国互联网行业的“黄金年代”一去不复返后,大厂们纷纷调转航线探寻,数年间尝尽了To B、元宇宙、直播带货等酸甜苦辣。如今蓦然回首才发现…

腾讯云linux服务器修改root用户登录密码操作步骤

https://cloud.tencent.com/loginhttps://cloud.tencent.com/login 点击上面链接 登录腾讯云控制台 在打开页面 确认服务器后 点 登录 按钮 操作命令: sudo passwd root 密码设置不小于16位 字母大小写数字加特殊符号组合 修改成功后关闭登录窗口即可。

9.26号算法题

数组的遍历 414.第三大的数 题解&#xff1a; class Solution {public int thirdMax(int[] nums) {TreeSet<Integer>treeSet new TreeSet<Integer>(); //生成一个TreeSet对象&#xff0c;存储有序唯一整数for (int num : nums){//遍历数组treeSet.add(num);//将…

C语言实现常见的数据结构

栈 栈是一种后进先出&#xff08;LIFO, Last In First Out&#xff09;的数据结构 #include <stdio.h> #include <stdlib.h>#define MAX 100typedef struct {int data[MAX];int top; } Stack;// 初始化栈 void init(Stack *s) {s->top -1; }// 判断栈是否为空…

观测云产品更新 | 场景、基础设施、用户访问、管理等

观测云更新 Breaking Changes 拨测标签&#xff1a;字段名由 tags.info 调整为 df_label 。 场景 1、仪表板新增历史版本记录&#xff1a;可查看此仪表板三个月内保存的版本记录&#xff0c;选中某版本后&#xff0c;可查看此版本图表详情&#xff0c;并以 json 格式、通过…

2024源代码加密软件分享TOP10丨保护源代码安全不泄露

在2024年&#xff0c;随着技术的不断进步&#xff0c;源代码加密软件也愈发成熟&#xff0c;为开发者和企业提供了更强大的保护手段&#xff0c;以应对日益严峻的数据安全挑战。以下是本年度推荐的TOP10源代码加密软件&#xff0c;它们各自具有独特的优势和特点&#xff0c;能够…

Nature | 浙江大学张龙:AARS1/2调控cGAS乳酸化并抑制固有免疫

景杰生物 | 报道 cGAS&#xff08;环状鸟苷酸-腺苷酸合成酶&#xff09;作为细胞质DNA感受器&#xff0c;是哺乳动物对抗微生物入侵的主要机制基础&#xff0c;且在抗肿瘤免疫方面也发挥作用。近日&#xff0c;被誉为诺贝尔奖“风向标”的生物医学领域重要奖项——拉斯克奖&…

8583报文解析(二)

参考 Demo&#xff1a;https://github.com/WTCool666/Iso8583/tree/master 一、【8583】ISO8583报文解析 ISO8583报文&#xff08;简称8583包&#xff09;又称8583报文&#xff0c;是一个国际标准的包格式&#xff0c;最多由128个字段域组成&#xff0c;每个域都有统一的规定&…

爆了爆了!清华大学出版《自然语言处理:原理、方法与应用》自然语言处理直通车!

今天给大家介绍一本重量级大模型书籍 《自然语言处理&#xff1a;原理、方法与应用》 《自然语言处理&#xff1a;原理、方法与应用》 是由王志立、雷鹏斌、吴宇凡合著的一本专业书籍&#xff0c;于2023年3月由清华大学出版社出版。这本书系统地阐述了自然语言处理&#xff08…

《虚空混蛋》风灵月影修改器进阶教程:掌控宇宙,肆意遨游星海

在《虚空混蛋》的浩瀚星际中&#xff0c;想要成为无畏的宇宙海盗&#xff0c;风灵月影修改器将是你的秘密武器。 下面的指南将揭示如何巧妙使用修改器&#xff0c;为你的星际征程插上翅膀。 1.准备工作&#xff1a; 从官方渠道获取最新版《虚空混蛋》风灵月影修改器并安装。确…

UnityHub下载任意版本的Unity包

1)先打开 // 也可以采用2直接打开 2)也可以直接打开 下载存档 (unity.com) 3)关联起来UnityHub即可

脚本命令类恶意代码——VBS混淆脚本分析方法

语法使用 控制流语句 分析恶意代码时&#xff0c;掌握条件语句和循环语句的工作原理及解混淆的技巧非常重要&#xff0c;因为恶意代码的作者通常会使用这些方法来复杂化代码逻辑、隐藏恶意行为并增加对分析人员的困难。 条件语句 If...Then...Else语句 If...Then...Else语…

【H2O2|全栈】关于CSS(7)CSS基础(六)

目录 CSS基础知识 前言 准备工作 元素的显示与隐藏 display visibility 元素不透明度 RGBa 十六进制 opacity 元素的溢出属性 元素的滚动条 居中布局 盒子水平居中 盒子垂直居中 盒子中心居中 网页的部分结构 顶部导航的编写技巧 轮播图的编写技巧 预告和…

压缩文件被加密?暴力拆锁!让加密文件无处遁形!

压缩包密码忘记了怎么办&#xff1f; 可以使用解密文件密码恢复软件&#xff0c;将可能存在的字符勾选&#xff0c;就可以进行密码恢复了 类似Ziperello&#xff1a; 选择你需要解密的zip压缩包后&#xff0c;勾选密码字符&#xff0c;如果完全忘记了密码&#xff0c;可以将其…