EasyRTMP:RTMP直播推流安卓Android EasyRTMP介绍

AI摘要

本文介绍了EasyRTMP推流组件,它由青犀开放平台开发,全平台支持,可避免复杂的RTMP流程。还介绍了安卓版EasyRTMP的功能,如切换分辨率、录像等。此外,提及EasyDSS商用流媒体服务器,与EasyRTMP等可形成完整视频直播、录播解决方案。

EasyRTMP是什么?

EasyRTMP是由青犀开放平台开发的一套RTMP直播推送功能组件,内部集成了包括:基本RTMP协议、断线重连、异步推送、环形缓冲区、推送网络拥塞自动丢帧、缓冲区关键帧检索、事件回调(断线、音视频数据回调),通过EasyRTMP我们就可以避免接触到稍显复杂的RTMP推送或者客户端流程,只需要调用EasyRTMP的几个API接口,就能轻松、稳定地进行流媒体音视频数据的推送,支持市面上绝大部分的RTMP流媒体服务器,包括Wowza、Red5、nginx-rtmp、crtmpserver等主流RTMP服务器,全平台支持:Windows、Linux、ARM(各种交叉编译工具链)、Android、iOS。

我们有专门的使用EasyRTMP library 实现的安卓版本的EasyRTMP,可直接将手机摄像头或者桌面以RTMP协议推送到相关服务器,简单易用、易于集成。EasyRTMP的APP界面如图所示:
Android EasyRTMP运行界面
可以看到,在首页有如下的功能元素:

  • 切换分辨率
  • 录像
  • 切换摄像头
  • 帧率码率显示
  • 开启、关闭摄像头推送
  • 开启、关闭屏幕推送
  • 设置

在此逐一介绍下:

切换分辨率

切换分辨率,即切换摄像头的预览分辨率。
首先,通过如下方式获取到摄像头支持的分辨率:

  ```
  List<Camera.Size> supportedPreviewSizes = mCamera.getParameters().getSupportedPreviewSizes();
  ```

通过如下方式设置预览分辨率:

  ```
  Camera.Parameters parameters = mCamera.getParameters();
  parameters.setPreviewSize(width, height);
  ...
  mCamera.setParameters(parameters);
  ```

切换分辨率时,先关闭预览重新设置分辨率,再开启预览即可:

  ```
  mCamera.stopPreview();
  // 设置新分辨率
  ...
  mCamera.startPreview();
  ```
录像

录像是通过EasyMuxer来进行录像的,EasyMuxer是对MediaMuxer进行的一个封装,通过简单的一些接口即可进行便捷录像、更换文件、关闭录像等功能。同时,EasyMuxer可对PCM音频格式进行录像,这样任何类型的音频编码数据都可以在先解码后,再编成AAC来录像成MP4格式。EasyMuxer的介绍见博客文章:Android MediaMuxer录像(支持G711音频)

切换摄像头

切换摄像头跟切换分辨率类似,都是先把当前预览关闭再重新打开。不同的是,切换摄像头时,需要将摄像头release再重新open,而切换分辨率只用stopPreview再startPreview即可。

  ```
  stopPreview();
  destroyCamera();
  if (mCameraId == Camera.CameraInfo.CAMERA_FACING_FRONT) {
      //现在是后置,变更为前置
      if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {//代表摄像头的方位,CAMERA_FACING_FRONT前置      CAMERA_FACING_BACK后置
    mCameraId = Camera.CameraInfo.CAMERA_FACING_BACK;
    createCamera();
    startPreview();
    break;
      }
  } else {
      //现在是前置, 变更为后置
      if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {//代表摄像头的方位,CAMERA_FACING_FRONT前置      CAMERA_FACING_BACK后置
    mCameraId = Camera.CameraInfo.CAMERA_FACING_FRONT;
    createCamera();
    startPreview();
    break;
      }
  }
  ```
显示帧率码率

为了方便处理,帧率码率的统计放在了推送端,即统计某一时间段内发送的视频帧数和字节数,然后除以时间段得出结果。这里使用EventBus POST出去即可,上层捕获到该Event后进行展示。

  ```
  mTotal += length;
  if (type == 1){
      mTotalFrms++;
  }
  long interval = System.currentTimeMillis() - pPreviewTS;
  if (interval >= 3000){
      long bps = mTotal * 1000 / (interval);
      long fps = mTotalFrms * 1000 / (interval);
      Log.i(TAG, String.format("bps:%d, fps:%d", fps, bps));
      pPreviewTS = System.currentTimeMillis();
      mTotal = 0;
      mTotalFrms = 0;

      BUS.post(new StreamStat((int)fps, (int)bps));
  }
  ```

上层捕获并显示:

  ```
  @Subscribe
  public void onStreamStat(final StreamStat stat) {
      streamStat.post(new Runnable() {
          @Override
          public void run() {
              streamStat.setText(getString(R.string.stream_stat, stat.fps, stat.bps / 1024));
          }
      });
  }
  ```
开启、关闭摄像头推送

当未推送的时候,点击按钮即可发起推送,这时候初始化Pusher库,初始化成功后,得到Pusher句柄,后续的Push接口里会根据该值来判断是否进行真正的推送动作。
当推送开始时,点击按钮可关闭推送,相应地进行反初始化,这样在Push接口就不会进行推送了。

开启、关闭屏幕推送

推送屏幕主要在RecordService服务里进行的,点击推送按钮时先开启服务:

  ```
  Intent intent = new Intent(getApplicationContext(), RecordService.class);
  startService(intent);
  ```

具体来说,MediaProjection 类可以将当前屏幕画面采集到一个surface里面,而MediaCodec可以从一个surface里面获取视频数据源。我们让MediaProjection投射到MediaCodec创建的Surface,MediaCodec就可以获取到MediaProjection投射的视频了。

关闭屏幕推送时停止服务器,在服务内部 onDestory时反初始化相关资源。
有关屏幕推送的描述详见:
Android MediaMuxer录像(支持G711音频)

设置

设置里面的功能如下图所示:

tsingsee

  • URL可以设置要推送的流地址,客户端亦可用改地址进行播放;
  • 是否能使用摄像头后台采集?如果能用,推送将在APP转到后台时继续;
  • 是否使用软编码?如果能用,那么app会使用x264软编码推送;
  • 叠加水印如果能用, 那么视频上面会叠加一些水印信息(目前可现实文字水印,文字内容在APP内可以设置);
  • 仅推送音频如果能用,那则不会推送视频,仅推送声音;
  • 打开录像文件夹点击后会打开在APP内产生的录像片段,可以进行便捷查看;
  • 版本号显示;
  • 保存设置并推出设置界面。

使用EasyRTMP推流组件完整方案

EasyDSS商用流媒体服务器(下载地址)是EasyDarwin流媒体团队开发的一款支持视频点播、转码、RTMP推流直播、RTMP/HLS直播分发、服务端录像、录像检索、录像下载、时移回放的商用流媒体服务器,采用业界优秀的流媒体框架模式设计,服务运行高效、稳定、可靠、易维护,支持RTMP直播、RTMP推送、HTTP点播、HLS直播,并支持关键帧缓冲,画面秒开等多种特性,能够接入WEB、Android、iOS、微信等全平台客户端,是移动互联网时代贴近企业点播/直播需求的一款接地气的流媒体服务器,配套OBS、EasyRTMP等直播推流工具以及EasyPlayer等网络播放器,可以形成一套完整的视频直播、录播解决方案,满足用户在各种行业场景的流媒体业务需求。

tsingsee
tsingsee

相关推荐

企业级AI模型工作站DLTM赋能智能安防:从被动录像到主动预警的AI进化之路

AI大模型训练工作站DLTM以零代码AI能力,让每一个安防系统都能从"事后查录像"进化为"实时智能预警"。

TSINGSEE青犀视频官方技术博客 377

企业级私有化AI模型训练工作站/制造业AI质检工作站DLTM如何重塑制造业质检体系

所有数据采集、标注、训练、推理环节均在企业内网完成。

TSINGSEE青犀视频官方技术博客 475

企业私有化AI训练推理一体工作站DLTM企业AI算力工作站重塑企业AI自主可控新格局

内置PyTorch、YOLO等主流深度学习框架,自动完成数据增强、模型选型、超参优化,实时展示训练进度与准确率曲线。

TSINGSEE青犀视频官方技术博客 434

制造业AI质检工作站/AI大模型训练工作站DLTM为制造业开启“智能质检”新时代

对于制造业企业而言,AI模型私有化部署平台DLTM带来的不仅是质检效率的提升,更是管理模式的变革。

TSINGSEE青犀视频官方技术博客 487

安全为本:自动化AI算法训练服务器DLTM私有化部署,企业级AI训练服务器合规怎么选?

Docker一键部署脚本,零代码操作进一步降低使用门槛。

TSINGSEE青犀视频官方技术博客 242

零代码自动化AI算法训练革命:企业级私有化部署DLTM自动化AI训练服务器,告别算法依赖

训练周期从数周缩短至数天,标注人力成本降低80%。

TSINGSEE青犀视频官方技术博客 426

AI模型开发DLTM企业级AI模型工作站/企业私有化AI训练推理一体工作站

提供标准化API接口,无缝对接企业现有业务系统,实现AI能力与现有业务流程的无感知融合。

TSINGSEE青犀视频官方技术博客 450

私有化本地化AI模型训推工作站/AI大模型训练工作站DLTM一站式AI模型训练与部署平台

平台内置的AI训练框架会自动完成模型训练,业务人员只需设置识别精度、训练轮数等简单参数,等待数小时就能得到可直接使用的质检模型。

TSINGSEE青犀视频官方技术博客 298

逻辑解析:EasyDSS背后的RTMP高清推流技术如何重构无人机直播“机巢+RTMP”协同

支持H.265高效编码技术,在相同带宽下实现更高质量的高清直播画面,即便在野外低带宽环境下,也能保障画面流畅无卡顿。

TSINGSEE青犀视频官方技术博客 347

WebRTC/视频转码/RTMP推流EasyDSS何让每一类用户都能实现高效便捷操作

AI纪要功能可自动生成会议总结与待办事项,便于后续回顾。

TSINGSEE青犀视频官方技术博客 678

如何利用EasyDSS视频WebRTC技术能力搭建一站式视频知识库

支持MP4、M3U8等多种培训视频格式自动转码,自定义分辨率、码率,可自适应电脑、手机、平板等全终端设备播放。

TSINGSEE青犀视频官方技术博客 1166

画面模糊、花屏、遮挡?EasyGBS视频质量诊断让监控故障主动上报

色彩类:亮度异常、偏色、对比度失衡。

TSINGSEE青犀视频官方技术博客 1525

融合与重构:从EasyDSS一站式视频云平台看流媒体技术如何重塑企业交互边界

如何平衡通用功能的稳定性和定制化需求的灵活性?如何在保证低延迟的同时,应对超大规模并发观看?这都是对底层架构设计能力的持续考验。

TSINGSEE青犀视频官方技术博客 1385

国标GB28181视频平台EasyGBS支持国密GB35114协议的重大意义

以往,安全建设常被视为增加预算、降低效率的“成本中心”。但在物联网、5G和人工智能深度融合的今天,安全正在转化为新的价值增长点。

TSINGSEE青犀视频官方技术博客 1404

EasyGBS视频质量诊断:告别人工盯屏,AI智能巡检如何“主动”发现11种画质异常?

通过计算画面边缘锐度和梯度信息来判断清晰度,更符合人眼视觉感官。

TSINGSEE青犀视频官方技术博客 1174

全场景视频技术赋能千行百业:点播直播视频会议平台EasyDSS全面构建视频新生态

支持实时字幕生成与AI助手自动提炼会议摘要,提供全流程解决方案,贴合远程协作需求。

TSINGSEE青犀视频官方技术博客 1127

EasyDSS视频直播点播视频会议平台,全场景视频需求一站搞定

全面支持 Web、iOS、Android等全平台开发与部署。

TSINGSEE青犀视频官方技术博客 998

国标GB28181视频质量诊断:EasyGBS服务插件EasyVQD快速识别花屏、蓝屏、画面冻结抖动

用CNN卷积神经网络识别画面异常(花屏、黑屏、模糊),准确率>98%——比如“模糊”不是靠“码率低”判断,而是用“清晰度算法”计算画面边缘锐度,比传统规则更准。

TSINGSEE青犀视频官方技术博客 1023

不止于GB28181:EasyGBS现已支持国密GB35114协议接入

严格遵循GB35114-2017标准规范,为雪亮工程、天网工程、智慧城市等国家级项目提供合规技术底座。

TSINGSEE青犀视频官方技术博客 1325

GB28181/RTSP/ONVIF/RTMP平台EasyCVR多分屏怎么指定通道播放位置?

要是你不手动指定窗口,系统也会自动按顺序分配播放位置,用起来同样很方便~

TSINGSEE青犀视频官方技术博客 504

如何用一套系统实现“水面、岸边、空中”立体防控?

河道中的垃圾漂浮物、油污、水生植物泛滥,以及非法排污等问题,不仅影响水域生态环境,还可能堵塞河道、影响行洪。

TSINGSEE青犀视频官方技术博客 609

EasyGBS实战:3年旧国标设备再用5年,为什么说改造比换新更划算?

其实很多人都踩过“旧设备必换”的坑,但真相是:只要选对改造方案,3-5年的旧设备,大多能比新设备更懂“省钱”。

TSINGSEE青犀视频官方技术博客 819

撕掉传统监控的“失明”标签:如何用最小成本,给老旧车间装上AI?

这种“技防+人防”的双重保障,正在让安全生产从“碰运气”变成“可计算”。

TSINGSEE青犀视频官方技术博客 507

从“分散”到“统一”,深度剖析“一网管全域”的底层通信逻辑

通过EasyCVR的纵向级联能力,实现了“矿井前端-县级分控-市级总控”的三级管理体系,不仅满足了实时监控需求,更通过智能分析实现了“事前预警防范、事中监管处置、事后可视化溯源”的全流程管理。比如,EasyGBS算法算力平台通过集成智能分析模型与云边协同架构,让监控系统从单纯的画面采集升级为具备行为识别、风险预警的智能决策中枢,实现“看得懂”的监管闭环,让每一路视频流都成为决策依据,每一个监控节点都成为安全防线。视频监控对接上级平台,看似只是技术层面的联通,实则是管理模式的革新。

TSINGSEE青犀视频官方技术博客 778

数据库选择有讲究?SQLite、PostgreSQL还是MySQL?

轻量级应用:Sqlite足够使用,部署最简单企业级应用:PostgreSQL/MySQL更稳定可靠可扩展性:随着业务增长,可以随时迁移数据库希望这篇文章能帮助您做出最适合的数据库选择!如果有任何疑问,欢迎在评论区留言讨论。

TSINGSEE青犀视频官方技术博客 829

视频分析≠天价改造!这家公司用“算法仓”模式卷死了传统方案

前几天去拜访一位做工厂安全管理的朋友,看到他办公室里密密麻麻的显示屏,忍不住吐槽:“你这都快成监控博物馆了!怎么同一个厂区要用这么多不同品牌的设备?朋友一脸无奈:“别提了,这些年陆续采购,各家供应商都不一样。现在想加个烟火识别报警和安全帽佩戴检测功能,得换掉上百个摄像头,成本高得吓人!相信不少朋友遇到过类似的困境。科技发展如此迅速,难道每项技术进步都必须以更换硬件为代价吗?这个工厂原有的监控系统很典型:200多路摄像头,来自5、6个不同品牌和型号,安装时间跨度超过8年。

TSINGSEE青犀视频官方技术博客 727

EasyGBS算法算力平台:1个平台=100种算法+无限场景

这种“按需配置”的能力,在差异化竞争里太吃香了。

TSINGSEE青犀视频官方技术博客 700

不懂国网B接口?别急!这份协议解析帮你理清电力视频接入逻辑

国网B接口是电力行业视频监控与物联网设备的“内部通用语言”,在满足电力专网安全、实时、可靠要求的同时,可平滑对接GB28181等通用标准,实现“统一监控、统一存储、分级控制、分域管理”的智能电网可视化目标。

TSINGSEE青犀视频官方技术博客 1237

“视频+AI”双引擎时代,谁先上车谁先赢!EasyGBS算法算力平台香在哪?

一次接入,万路视频秒级汇聚,彻底告别“一个品牌一个客户端”。

TSINGSEE青犀视频官方技术博客 706

还在纠结EasyCVR、EasyNVR、EasyGBS咋选?三句话给你说明白!

其实这三个平台各有侧重,EasyCVR胜在兼容广,EasyNVR赢在轻量化,EasyGBS强在算法融合。

TSINGSEE青犀视频官方技术博客 907
上一篇: EasyRTMP:RTMP视频推流结合海康HCNetSDK获取海康摄像机H.264实时流并转化成为RTMP直播推流(附源码)
下一篇: EasyPlayerPro:安卓视频播放器Android H.265硬解码方案(内含代码)
TSINGSEE
TSINGSEE 企业官方账号 企业官方账号
博客等级 码龄8年 5866粉丝 2207原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值