技术背景2015年,我们发布了第一版的Android平台RTMP摄像头|屏幕直播推送模块,几经迭代,功能强大、性能优异,在前些年几乎已经是业内延迟体验和口碑最好的RTMP模块了(毫秒级延迟,低延迟模式下 鉴于我们侧重于传统行业音视频直播方案,我们从以下几个维度,介绍下Android平台RTMP摄像头采集推送模块的使用场景。 远程监控家庭监控:将带有摄像头的 Android 设备放置在家中合适的位置,通过 RTMP 推流将摄像头采集到的视频数据传输到远程的服务器或手机端,用户可以随时随地通过网络查看家中的实时情况,保障家庭安全 企业监控:在企业办公场所、生产车间等区域安装 Android 摄像头设备,利用 RTMP 推流技术将监控画面实时推送到管理中心或相关负责人的终端设备上,方便企业进行远程管理和监控,及时发现问题并采取措施 医疗健康远程医疗诊断:医护人员可以使用 Android 设备的摄像头采集患者的病情症状、伤口等画面,通过 RTMP 推流将视频数据传输给远程的医生,医生根据实时画面进行诊断和指导,为患者提供及时的医疗服务
好多开发者提到,有些Windows机器或Android手机采集麦克风的音频,过小或过大,一般过小居多,还有就是,混音的时候,希望背景音音量大小可实时调整,针对这种情况,大牛直播SDK(Github)做了如下的设计 Windows平台推送端(以C#为例): /* *设置输入音量, 这个接口一般不建议调用, 在一些特殊情况下可能会用, 一般不建议放大音量 *index: 一般是0和1, 如果没有混音的只用 Android推送端: /** * 设置输入音量, 这个接口一般不建议调用, 在一些特殊情况下可能会用, 一般不建议放大音量 * * @param index: 一般是0和1, 如果没有混音的只用
首先是直播视频采集端,由主播通过摄像头手机等采集设备,采集视音频流,编码后采用RTMP协议[^RTMP]推流到直播流服务器。 而在移动端如果对实时性要求不高,那么采用hls比较好,因为ios包括3.0以上的安卓都原生支持hls协议。 视频采集与编码 直播教学系统中,视频采集可以有多重途径,比如通过电脑摄像头,通过OBS等录屏软件进行录屏,通过手机摄像头采集。 由于目前户外直播和移动互联网很火,所以我们就选择实现在安卓设备上通过摄像头采集视频流。 播放器 我们在试验的过程中,使用多种播放器和库在全平台实现了rtmp和hls的播放。在网页端使用了videojs,在安卓端使用vitamio。
技术背景随着国产化操作系统的推进,市场对国产化操作系统下的生态构建,需求越来越迫切,特别是音视频这块,今天我们讨论的是如何在linux平台实现屏幕|摄像头采集,并推送至RTMP服务。 FFmpeg VS SmartPublisher今天我们探讨的是,两种技术选型下的linux平台同屏摄像头RTMP推送实现:FFmpeg技术方案在Linux平台上采集屏幕和摄像头内容,并将其推送到RTMP Linux平台x64_64架构|aarch64架构RTMP直播推送模块功能支持如下:音频编码:AAC/SPEEX;视频编码:H.264;推流协议:RTMP;[音视频]支持纯音频/纯视频/音视频推送;支持 X11屏幕采集;支持部分V4L2摄像头设备采集;[屏幕/V4L2摄像头]支持帧率、关键帧间隔(GOP)、码率(bit-rate)设置;[V4L2摄像头]支持V4L2摄像头设备选择(设备文件名范围:[/dev ]支持基于libpulse接口采集本机PulseAudio服务音频;[预览]支持推送端实时预览;[对接服务器]支持自建标准RTMP服务器或CDN;支持断网自动重连、网络状态回调;屏幕和摄像头合成/多层合成
首先是直播视频采集端,由主播通过摄像头手机等采集设备,采集视音频流,编码后采用RTMP协议1推流到直播流服务器。 而在移动端如果对实时性要求不高,那么采用hls比较好,因为ios包括3.0以上的安卓都原生支持hls协议。 视频采集与编码 视频采集可以有多重途径,比如通过电脑摄像头,通过OBS等录屏软件进行录屏,通过手机摄像头采集。 由于目前户外直播和移动互联网很火,所以我们就选择实现在安卓设备上通过摄像头采集视频流(其实是因为我是写安卓的= =)。 播放器 我们在试验的过程中,使用多种播放器和库在全平台实现了rtmp和hls的播放。在网页端使用了videojs,在安卓端使用vitamio。
大牛直播SDK的RTMP推送|轻量级RTSP服务模块实现主要涉及到SDK的初始化、视频采集设置、音频采集设置、编码设置、推流设置以及实时预览和停止预览等功能:目前,以RTMP推送模块为例,目前我们主要设计支持以下功能 :音频编码:AAC/SPEEX;视频编码:H.264、H.265;推流协议:RTMP;[音视频]支持纯音频/纯视频/音视频推送;[屏幕/摄像头]支持帧率、关键帧间隔(GOP)、码率(bit-rate)设置 采集设置、启/停用Aero;[音频]采集麦克风;[音频]采集扬声器;[预览]支持推送端实时预览;支持实时静音、取消静音;[对接服务器]支持自建标准RTMP服务器或CDN;支持断网自动重连、网络状态回调; 注意,无论后续是否进行多实例推送,Init()接口都仅需调用一次。2. 视频采集设置数据源选择:支持从摄像头、屏幕或外部数据源采集视频数据。参数设置:包括帧率、分辨率、码率、关键帧间隔等。 摄像头设置:支持摄像头选择、分辨率设置、帧率设置、水平/垂直翻转、旋转等。屏幕采集:支持全屏采集或部分区域采集,同时支持DXGI采集设置和启/停用Aero等功能。3.
推送模块(Push Stack) RTMP 推流 SDK 支持摄像头采集、屏幕采集、音视频编码、码率控制、断网续传、音视频同步。 下列为基于实际项目场景整理的典型链路组合,便于开发者按需参考部署: 场景一:RTSP 监控画面低延迟播放(安卓 / Windows)适用场景:工业视频监控、智能机器人远程操控、安防可视化管理等 链路组合 推送 SDKAndroid / iOS / Windows–RTMP硬编 / 软编YUV 输入 / SEI 注入是(推送端录像)自动重连、码率控制支持屏幕/摄像头采集、音视频同步轻量级 RTSP Server 案例2:Android 移动终端采集 + 推送 + 录像 场景描述:用于远程运维、巡检、教学、新闻移动直播等场景,需边拍边推 + 实时录像 推荐组合: RTMP 推送模块(支持摄像头采集、屏幕录制) 推荐组合: 推送端:RTMP 推送模块 + SEI 扩展数据注入 地面接收端:RTMP 播放模块 + 播放端录像模块 分发中继端:RTMP 录制 + 前端播放 部署环境:无人机安卓终端 + 控制中心
消息推送的目的:让服务器端及时的通知客户端 实现方案 轮询:客户端每隔一定的时间向服务器端发起请求,获得最新的消息 特点:如果用在最新新闻通知上,效率就有点低了,技术简单,好实现 应用场景:服务器端以一定的频率更新时 客户端对短信进行解析 特点:最及时,费用高 应用场景:土豪公司,没联网也可以收到信息 使用第三方的开源项目: androidPN (android push notify) 使用第三方的api: 百度推送 ,极光推送,各推,微信推送,等 消息推送的实现原理 长连接+心跳帧,我们平常的socket连接都是短连接,当用完之后会close掉,长连接是一直保持这个连接状态,但是如果一段时间,服务器和客户端没有消息传递
技术背景大牛直播SDK跨平台RTMP直播推送模块,始于2015年,支持Windows、Linux(x64_64架构|aarch64)、Android、iOS平台,支持采集推送摄像头、屏幕、麦克风、扬声器 5.0及以上支持SetVideoHWEncoderQuality设置视频硬编码质量, 安卓9及以上支持, 仅当硬编码器码率控制模式(BitrateMode)是CQ(constant-quality mode 的情况下才有效, 安卓7及以上支持SetVideoHWEncoderMaxBitrate设置视频硬编码最大码率, 安卓没有相关文档说明, 所以不建议设置水印文字、png水印PostLayerBitmap 功能支持音频编码:AAC/SPEEX;视频编码:H.264、H.265;推流协议:RTMP;[音视频]支持纯音频/纯视频/音视频推送;[摄像头]支持采集过程中,前后摄像头实时切换;支持帧率、关键帧间隔( GOP)、码率(bit-rate)设置;支持RTMP推送 live|record模式设置;支持前置摄像头镜像设置;支持软编码、特定机型硬编码;支持横屏、竖屏推送;支持Android屏幕采集推送;支持自建标准
安卓端下载: https://play.google.com/store/apps/details? id=com.dev47apps.droidcam 安卓端配置(默认,打开 APP 就行了): windows 电脑端下载: https://www.dev47apps.com/droidcam/windows / 跟 安卓客户端在同一局域网,填上 同安卓端上面显示 IP 和 端口,然后 点击 start 就能看到图像了 效果: 百度云下载客户端: 链接:https://pan.baidu.com/s/1tXomjmwyAFeF2JFKt5CCaA
使用我推荐的这款软件,就可以轻松抓取直播源 支持类型: hello tv直播源抓取 urlhelper 直播源抓取 rtmp直播源抓取 抓取电视直播源m3u8的地址 操作方式: 首先,你需要下载安装一个软件
可是在此之前,得先有一个推流工具向MediaMTX推送视频流,这样末端的拉流程序才能从MediaMTX源源不断地拉取视频流。 那么Android手机可使用anyRTC从摄像头实时采集视频信号,并向后端的MediaMTX持续推送视频数据。 那么准备两部安卓手机,一部用于推流,另一部用于拉流。用于推流的手机点击App界面上的【直播推流】区域,打开推流页面如下图所示: 在推流之前,得先输入流媒体服务器的推流地址。 点击左上角的翻转按钮可切换前后摄像头,点击麦克风按钮可开关声音,可见anyRTC正在把摄像头采集到的视频数据向MediaMTX推流。 对比anyRTC的推流预览界面和拉流播放界面,可知一部手机摄像头采集到的视频信号正确传送给了另一部手机。 更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。
转推:通过RTMP直播推送SDK的编码后数据输入接口,把回调上来的数据,传给RTMP直播推送模块,实现RTSP数据流到RTMP服务器的转发;3. 整体网络状态反馈:考虑到有些摄像头可能会临时或异常关闭,RTMP服务器亦是,可以通过推拉流的event回调状态,查看那整体网络情况,如此界定:是拉不到流,还是推不到RTMP服务器。 多路RTMP/RTSP转RTMP推送模块功能支持:支持拉取rtmp流;支持拉取rtsp流;Windows支持本地flv文件转发(支持制定文件位置转发,或转发过程中seek);支持本地预览;支持转发过程中 h265转rtmp h265推送);上述实现,2016年我们已经非常成熟,本次要谈的,是开发者实际场景用到的一个技术需求,如何实现视频用RTSP数据源获取到的,音频采集麦克风的数据。 推送的demo界面,可以看到,这个demo,不是单纯的RTSP转RTMP推送的,还可以实现RTSP流获取后,回调上来解码后的数据,然后添加动态水印或其他处理后,把video数据二次编码推送出去。
随着无纸化、智慧教室等场景的普及,好多企业或者开发者开始寻求更高效稳定低延迟的RTMP同屏方案,本文以大牛直播SDK(Github)的同屏demo(对应工程:SmartServicePublisherV2 )为例,介绍下如何采集编码推送RTMP数据到流媒体服务器。 推送的URL,并调用SartPublisher()接口,开始推送: //如果同时推送和录像,设置一次就可以 InitAndSetConfig(); if last_image.close(); last_image = null; } } } 关闭采集推送 、编码并推送的大概流程,感兴趣的开发者可参考下。
以大牛直播SDK的RTMP推送端为例,一般是根据视频宽高、帧率、H.264、H.265编码类型等,给出评估的码率范围,然后设置:Android平台RTMP直播推送SDK音频编码:AAC/SPEEX;视频编码 :H.264、H.265;推流协议:RTMP;[音视频]支持纯音频/纯视频/音视频推送;[摄像头]支持采集过程中,前后摄像头实时切换;支持帧率、关键帧间隔(GOP)、码率(bit-rate)设置;支持RTMP 推送 live|record模式设置;支持前置摄像头镜像设置;支持软编码、特定机型硬编码;支持横屏、竖屏推送;支持Android屏幕采集推送;支持自建标准RTMP服务器或CDN;支持断网自动重连、网络状态回调 */public native int SetVideoHWEncoderBitrateMode(long handle, int hw_bitrate_mode);/* * 设置视频硬编码复杂度, 安卓 SetAVCHWEncoderProfile(long handle, int hw_avc_profile);/* * 设置H.264硬编码Level, 这个只有在设置了Profile的情况下才有效, 安卓
其实早在自己大二的时候就集成过个推 SDK,溜达一圈又回来集成个推推送SDK了,发现现在的个推 SDK 与当年相比,集成起来真的方便多了。 这次集成的是Android推送SDK,希望这篇文章,可以让同学们可以更加快捷的集成个推推送。 思维导图 ? ,iOS 是默认不勾选的,听说 iOS 有自带的推送系统?先不管了,勾上再说,他们爱用不用。 获取配置数据 由于我已经注册完成了,填完后的界面就要靠大家自行脑补了。 ,大家可以随意,只要在 activity 初始化即可,建议是初始化越早越好 接收推送服务事件 那么问题来了,搞了上面这么多东西,推送的消息或者透传是怎么个接收法呢? 推送测试消息的时候,应用一定要在前台,在前台,在前台,重要的事情说三遍 #尾声 首次集成这类大型 SDK 让我意想不到的顺利,我和我的小伙伴们都?惊呆了?
基于此,好多开发者苦于在Unity环境下,没有低延迟的推拉流解决方案,前几年,我们在Unity环境下推出了跨平台低延迟的RTMP|RTSP直播播放器,很好的解决了好多对延迟要求苛刻的使用场景。 随着时间的推移,越来越多的开发者联系我们,希望我们能推出Unity环境下的RTMP推送模块,获取到unity的实时数据,更低延迟更高效率的实现数据传输推送,基于此,我们发布了Unity环境下的RTMP推送模块 本文以Windows平台为例,数据源分别为Unity的窗口、摄像头或整个屏幕,编码传输模块,还是调用大牛直播SDK(官方)的原生接口,简单界面先睹为快: win_publisher_unity2.png 数据采集 摄像头和屏幕的数据采集,还是调用原生的SDK接口,本文不再赘述,如果需要采集Unity窗体的数据,可以用参考以下代码: if ( texture_ == null || video_width 开始推送、停止推送 public bool StartPublisher(String url) { if (CheckPublisherHandleAvailable
本库对屏幕采集编码进行了封装,简单的调用即可实现MediaProjection权限申请,H264硬编码,错误处理等功能。 image.png 特点 适配安卓高版本 使用 MediaCodec 异步硬编码 编码信息可配置 通知栏显示 链式调用 使用 ScreenShareKit.init(this) . onH264{ buffer, isKeyFrame, ts -> }.start() Github 源码地址 实现 1 请求用户授权屏幕采集 @TargetApi(Build.VERSION_CODES.M 2.适配安卓10 如果 targetSdkVersion 设置的 29及以上,在获取到 MediaProjection 后调用 createVirtualDisplay ,将会收到一条异常 java.lang.SecurityException Resources.getSystem().displayMetrics.widthPixels }) }.start() 几行代码就可以实现屏幕采集编码传输
技术背景 我们在对接Unity下推送模块的时候,遇到这样的技术诉求,开发者希望在Android的Unity场景下,获取到前后摄像头的数据,并投递到RTMP服务器,实现低延迟的数据采集处理。 在此之前,我们已经有了非常成熟的RTMP推送模块,也实现了Android平台Unity环境下的Camera场景采集,针对这个技术需求,有两种解决方案: 1. 技术实现 本文以大牛直播SDK的Unity下WebCamTexture采集推送为例,audio的话,可以采集麦克风,或者通过audioclip采集unity场景的audio,video数据的话,可以采集 总结 Unity场景下采集摄像头数据并编码打包推送到RTMP服务器或轻量级RTSP服务,采集获取数据不麻烦,主要难点在于需要控制投递到原生模块的帧率,比如设置30帧,实际采集到的数据是50帧,需要均匀的处理数据投递 配合SmartPlayer播放测试,无论是RTMP推送还是轻量级RTSP服务出来的数据,整体都在毫秒级延迟,感兴趣的开发者,可以跟我沟通交流测试。
国产操作系统|Linux下RTMP同屏推送 在发布国产操作系统|Linux平台的RTMP直播推送SDK之前,大牛直播SDK(官方)的RTMP推送模块已稳定运行在Windows、Android和iOS平台几年了 相对Windows、Android和iOS平台,Linux在桌面采集等方面,资料非常少,数据采集可以采用调用XLib相关接口实现,本Demo实现的是Linux上实现桌面和系统声音采集,然后使用RTMP协议推出去的一个 \n"); } return true; } 推送接口封装 NT_HANDLE StartPush(NT_SmartPublisherSDKAPI* push_api, const std 推送和RTMP播放为例,整体测试时延都在毫秒级,可满足像内网无纸化、教育同屏等场景需求。 Linux的RTMP推送接口,和Windows平台的相差无几,通用接口四个平台几乎一致,不存在集成难度。