Android 视频直播 SDK
Android 视频直播 SDK接入说明
一、名词解释
分辨率:用于计算机视频处理的图像,以水平和垂直方向上所能显示的像素数来表示分辨率。常见视频分辨率的有1080P即1920x1080,720P即1080x720,640x480等。
帧率:每秒的帧数(fps)或者说帧率表示图形处理器处理场时每秒钟能够更新的次数。
码率: 数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。
二、申请APPKey 和 APPSecretkey
1、 登录http://www.rdsdk.com/注册用户
2、 登录注册好的用户
3、 进入视频云管理 点击(新增)获取应用的 appkey 、appsecret
三、集成步骤
(一)、运行环境
Android 4.1(api 16)以上;
处理器:双核 1GHz以上CPU(目前只支持ARM CPU, X86、MIPS暂不支持);推荐四核1.2GHz以上CPU
内存:1 GB以上;
(二)、下载并导入SDK
1、导入RdLiveSDK
2、Studio build.gradle 配置如下:
关于arm版本引发的冲突解决办法如下:(重要)
步骤一:sdk library模块新增过滤
步骤二:application模块中过滤 (很重要)
(三)、准备AndroidManifest.xml (权限,注册Activity)
a.添加权限:
设备支持的版本号
android:targetSdkVersion="23" Android 6.0请遵循请求权限规范 申请以下权限再调用之前
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
如果不想影响当前项目的AndroidManifest.xml,可以合并RdLiveSDK中的配置,修改project.properties文件如下:
android.library.reference.1=../RdLiveSDK
manifestmerger.enabled=true
(四)、SDK初始化
(五)、关于SDK权限
获取权限
RDLiveSDK.getAuthType();
(六)、直播(确保步骤4已经初始化)
初始化直播环境
初始化当前直播环境 。推荐在startActivity调用,原因:部分手机省电模式下从后台切回前台会新开进程
RDLiveSDK.onInit(context);
1、直播初始化参数
// 直播画面打开之前配置直播参数(可包含摄像头、输出尺寸、帧码率、是否美颜等)
// 通过此方法设置摄像头方向、是否美颜只在onprepared(RelativeLayout,listener)之前调用有效
//初始化之后设置前后置方向使用RDLiveSDK.switchCamera()、RDLiveSDK.enableBeautify(bEnableBeautify)
RDLiveSDK.setEncoderConfig(LiveConfig);
2、初始化直播界面
/**
* 准备SDK
* @param rlParent
* 用于显示摄像头的父布局
* @param iListener
* SDK消息Listener
*/
RdLiveSDK.onPrepare(m_pflPreviewLayout, iListener);
一般用在Activity.onStart()中
3、关于直播摄像头的释放
//用于响应Activity.onDestroy()
RdLiveSDK.onExit(this);
4、开始、结束直播
/**
* * 开始直播
* @param uidORtmp
* 集成两种直播方式(uid或直播推流地址)
* @param title
* 直接推流方式title可传null,否则title不能为null
*/
RDLiveSDK.startPublish(uidORtmp, title);
//结束直播
RdLiveSDK.stopPublish();
//是否正在直播...
RdLiveSDK.isLiving();
5、关于回调接口
/**
* 打开摄像头成功并且开始预览界面
* @param nResult
* 返回值 >={@link ResultConstants#SUCCESS} 代表成功,否则为失败
* @param strResultInfo
* 具体返回消息
*/
//打开摄像头成功并且开始预览界面
IRecorderListener.onPrepared(int nResult, String strResultInfo);
/**
* 响应直播开始
* @param nResult
* 返回值 >={@link ResultConstants#SUCCESS} 代表成功,否则为失败
* @param strResultInfo
* 具体返回消息
*/
//直播成功的回调
IRecorderListener.onRecordBegin(int nResult, String strResultInfo);
/**
* * 响应获取已录制时间
* @param nPosition 已录制时间 (ms)
* @param nRecordFPS 录制帧率
* @param delayed 延迟时间
*/
//获取直播信息,如已直播时长和直播帧率、直播延迟
IRecorderListener.onGetRecordStatus(int nPosition, int nRecordFPS, int delayed);
/**
* 响应直播结束
* @param nResult
* 返回值 >={@link ResultConstants#SUCCESS} 代表成功,否则为失败
* @param strResultInfo
*/
IRecorderListener.onRecordEnd(int nResult, String strResultInfo);
/**
* 录制出现错误
* @param nResult
* 返回值
* @param strResultInfo
* 具体返回消息
*/
IRecorderListener.onRecordFailed(int nResult, String strResultInfo);
/**
* 响应摄像头打开信息
* @param nResult
* 返回值 >={@link ResultConstants#SUCCESS} 代表成功,否则为失败
* @param strResultInfo
* 具体返回消息
*/
//相机打开失败,权限不足
IRecorderListener.onCamera(int nResult, String strResultInfo);
//新增推流重连逻辑接口
/**
* @param nResult
* {@link ResultConstants#RECONNECTION_PREPARE} 开始重连
* {@link ResultConstants#RECONNECTION_SUCCESS} 重连成功
* {@link ResultConstants#ERROR_RECONNECTION_TIMEOUT} 重连超时
* @param msg
* 文本内容
*/
IRecorderListener.onReconnection(int nResult, String strResultInfo);
//Android 6.0 请在调用onprepare前确保存储、相机、录音机权限均已授权成功;否则请打开权限
6、直播关于摄像头相关(必须在onprepare回调之后才有效)
//聚焦
RdLiveSDK.cameraAutoFocus();
// 是否为前摄像像头
RdLiveSDK.isFaceFront();
// 切换摄像头
RdLiveSDK.switchCamera();
7、闪光灯(必须在onprepare回调之后才有效)
//获取闪光灯状态
RdLiveSDK.getFlashMode();
//打开闪光灯
RdLiveSDK.setFlashMode(boolean enable);
8、美颜
//是否支持美颜
RdLiveSDK.isBeautifyEnabled();
//打开或关闭美颜
RdLiveSDK.enableBeautify(boolean bEnableBeautify);
9、截图 (必须在listener.onprepared回调之后才有效)
/**
* 当前画面截图
* @param path
* 截图文件路径
* @param width
* 截图宽度
* @param height
* 截图高度
*/
RdLiveSDK.screenshot(path, 480, 640);
/**
* 响应保存截图
* @param nResult
* 返回值 =={@link ResultConstants#SUCCESS} 代表成功,否则为失败
* @param msg
*
*/
IRecorderListener.onScreenShot(int nResult, String path);
10、静音
//设置静音
RDLiveSDK.setMute(boolean mute);
//静音状态
RDLiveSDK.isMute();
11、设置推流重连超时
//设置推流重连超时(单位:毫秒)该方法在开始直播之前调用
RDLiveSDK.setReconnectionTimeOut(int nTimeOut)
12、设置推流超时
//设置推流超时时间(1000到30000毫秒之间)
RDLiveSDK.setApiLiveSetRtmpUploadPacketTimeout(int ntimeOut);
13、开启低配美颜(美颜需Android4.3及以上)
//该方法针对4.3以上,低配置机器(不常用)
RDLiveSDK.enableDeviceLowBeautify(boolean enable);
14、获取当前低配美颜状态
RDLiveSDK.isDeviceLowBeautify();
15、设置美颜等级
//1-5 数字越大等级越高
RDLiveSDK.setBeautifyLevel(int level);
16、获取美颜等级
Int level=RDLiveSDK.getBeautifyLevel();
17、直播前台切到后台
18、直播后台切回前台
在Activity.onStart()中调用
1.获取直播是否暂停的状态
获取是否暂停状态, pausePublish()--->onRestoreInstanceState() 场景:从直播切到后台,到未继续推流之前 为 true;且他时间段为false
2继续推流
isLivingUI :true继续推流,sdk将继续直播
19、水印相关
//开启水印
RDLiveSDK.registerOSDBuilder(DemoOSDBuilder.class);
//关闭水印
RDLiveSDK.registerOSDBuilder(null);
Public class DemoOSDBuilder extends OSDBuilder{
//设置水印位置
setOSDGravity(int nGravity);
//刷新水印内容
protected void onRefreshOSDView(View vOSD) {}
}
注混淆:
20、在线直播列表
21、横竖屏录制
说明:输出视频的录制方向,内部通过获取屏幕方向得到
//屏幕方向旋转回调,通过回调函数,确定录制方向
/开始直播录制
第一步:锁定屏幕当前的方向(固定输出方向) ,录制结束恢复自动旋转
第二步:设置输出推流的输出尺寸,推流尺寸统一参照竖屏(sdk内部取了屏幕旋转值)
第三步:执行推流
//从后台切回前台时,需要重新锁定屏幕方向
22、自定义推流数据(4.3以上的设备支持)
第一步:检测是否支持该功能:
RDLiveSDK.enableCustomData()
第二步:实现接口
com.rd.recorder.ICustomData
设置接口实现:
开启或关闭自定义推流:
//混淆
#自定义推流
-keep class * implements com.rd.recorder.ICustomData {*;}
23、混音播放器
(只支持播放本地音乐,支持的音频格式mp3、mp2、 aac、 wma、 wmv、 ac3、 ogg)
此播放器支持混音功能.场景:插上耳机,传输一路音频流到看直播端
player.setOnPreparedListener(listener);
player.setOnInfoListener(infolistener);
player.setOnCompletionListener(completlistener);
player.prepareAsync();
24、是否开启混音功能
//设置是否开启混音
//获取当前是否开启混音
25、设置混音占比
//设置混音占比0-100
//获取当前混音占比
(七)、看直播(支持UID,(RTMP、RTSP两种方式处理逻辑一样)
1、在布局文件中编写直播视频播放控件 通过控件id找到控件
2、检测主播是否退出房间
3、Uid查看直播
//通过Uid获取直播流(参考demo中MainActivity# R.id.mBtnPlayLiving)
RDLiveSDK.getLivingUid(String uid, RDLiveSDK.ILivingListener listener)
//可以直播流的地址(rtmp://) 不知道直播liveId可传null(liveId由listener返回)
vvPlay.setVideoPath(“<您要观看的视频rtmp>”,liveId);
Url查看直播
//可以直播流的地址(rtmp://)
vvPlay.setVideoPath(“<您要观看的视频rtmp>”);
4、播放器设置
* 是否开启全屏显示(内容会被裁减)默认全屏
true全屏显示部分内容会被裁剪;false 显示全部全部视频内容
vvPlay.enableFullScreen(boolean enable);
5、查看播放器预览模式是否全屏
vvPlay.isFullScreen();
6、播放器回调
/ IMediaPlayer.ANCHOR_PASUING 主播离开(只针对观看UID直播)
//what == IMediaPlayer.MEDIA_INFO_BUFFERING_START (网络视频,开始缓冲)
//what == IMediaPlayer.MEDIA_INFO_BUFFERING_END(缓冲结束)
//what == IMediaPlayer.MEDIA_INFO_AUDIO_RENDERING_START (vvPlay.start(),开始音频回调,播放器接收到画面,可隐藏遮罩部分(防止一开始黑屏))
//onError回调监听主播退出
//what==IMediaPlayer.ANCHOR_EXIT 主 播 退 出
(八)、打包混淆
需要在proguard.cfg文件中添加如下配置项:
-dontwarn com.rd.**
-keep class com.rd.** { *; }
-dontwarn tv.danmaku.**
-keep class tv.danmaku.** { *; }
#水印
-keepclassmembers class * extends com.rd.recorder.OSDBuilder{
* ;
}
#自定义推流
-keep class * implements com.rd.recorder.ICustomData {*;}
具体情况
锐动直播SDK android版通过android移动端实时采集视频,同时在拍摄过程中支持多种实时滤镜效果,只要调用视频直播接口,通过3G、4G、WIFI等网络,推流发送给云端流媒体直播系统处理,并通过CDN视频加速分发做现场直播播出,供远程观看,是一款专业级水平的视频直播开发包。同时,在节目直播过程中,直播视频可归档、存储,方便后续回看。视频直播SDK不断优化视频采集和处理能力,让开发者更专注自身业务应用开发和运营。
SDK功能介绍:
1.直播推流
- 实时美颜
- 滤镜 内置主流滤镜,支持扩展更多滤镜
- 协议 RTMP协议,支持主流服务器
- 编码与设置 支持H264及AAC编码;支持智能硬件编码;支持自定义分辨率、码率、帧率
- 内置伴音 主播可以高质量卡拉OK及喊麦主持
- 可定制的水印
- 人脸识别及装扮 支持人脸识别并内置了一些演示人脸装扮挂件,支持扩展更多
- 界面可定制 当前已经实现了通用的开源界面,也可根据实际业务进行扩展
- 云服务器 支持锐动云服务器推流(UID直播推流),也支持使用第三方云服务器(URL直播推流)。
- 摄像头切换 前、后摄像头自由切换,中间无卡顿
- 静音 支持实时静音与取消静音
- 支持横竖屏
2.播放器
- 低延迟
- 协议 支持RTSP/RTMP协议,支持主流服务器
- 支持自定义布局
- 静音 支持实时静音与取消静音
- 支持横竖屏
截图
最新SDK下载(以下链接是最新的,github代码会稍有延迟):
功能试用:
下载以下demo应用,可以进行功能试用。
关于授权:
www.rdsdk.com 致力于专业的人做专业的事,降低客户的开发时间和开发成本,你只需要支付很少的费用,花上几个小时就能增加直播及回放功能。
开发文档:
JAVA接口文档:
洽谈咨询:
SDK交流群: 305128688
咨询电话: 4008989105
客服电话: 15313066905 (周一至周五 9:00-18:00)
客服邮箱:2637433751@qq.com
Android 视频直播 SDK的更多相关文章
- Android 视频编辑 SDK
Android 视频编辑 SDK接入说明 一.名词解释 分辨率:用于计算机视频处理的图像,以水平和垂直方向上所能显示的像素数来表示分辨率.常见视频分辨率的有1080P即1920x1080,720P即1 ...
- 视频直播SDK-ios版
IOS视频直播接入说明 一.名词解释 分辨率:用于计算机视频处理的图像,以水平和垂直方向上所能显示的像素数来表示分辨率.常见视频分辨率的有1080P即1920x1080,720P即1080x720,6 ...
- iOS/Android 视频编辑SDK
锐动天地为开发者提供短视频编辑.特效.直播.录屏.编解码.视频转换,等多种解决方案,涵盖PC.iOS.Android多平台.以市场为导向,不断打磨并创新技术,在稳定性,兼容性,硬件设备效率优化上千捶百 ...
- Android视频直播解决方案(rstp、udp)
做局域网视频直播有两种方案,通过rstp或udp协议. 1.rstp协议,网络上有个开源项目,基于Android,且这个项目也是一个服务端,里面也集成了http访问页面,可以通过http或者rstp直 ...
- 带着问题写React Native原生控件--Android视频直播控件
最近在做的采用React Native项目有一个需求,视频直播与直播流播放同一个布局中,带着问题去思考如何实现,能更容易找到问题关键点,下面分析这个控件解决方法: 现在条件:视频播放控件(开源的ijk ...
- Android视频直播全屏实现
/** * 添加直播组件 */ @SuppressLint("JavascriptInterface") private void addPlayerLive(final Subj ...
- Android视频直播:流媒体服务器搭建
一.前言 实时视频直播是这两年非常火的技术形态,已经渗透到教育.在线互娱等各种业务场景中.但要搭建一套实时视频直播系统,并非易事,下面针对直播系统的的搭建做一下说明: 1.1 通常的直播系统的技术模型 ...
- Android中直播视频技术探究之---采集摄像头Camera视频源数据进行推流(采用金山云SDK)
一.前言 在之前已经详细介绍了Android中的一种视频数据源:Camera,不了解的同学可以点击进入:Android中Camera使用详解 ,在这篇文章中我们介绍了如何采集摄像头的每一帧数据,然后进 ...
- 「视频直播技术详解」系列之七:直播云 SDK 性能测试模型
关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 本系列文章大纲如下: ...
随机推荐
- ReactiveCocoa 设置绑定注意事项
要在ViewLoad里面进行绑定,因为在init中还没有初始化界面,所有绑定会无效
- referrer vs referer
http request里面是referer 其实是http规范拼写错了,正确的拼写应该是referrer
- 【HDU 5808】 Price List Strike Back (整体二分+动态规划)
Price List Strike Back There are nn shops numbered with successive integers from 11 to nn in Bytelan ...
- 滚轮事件的防冒泡、阻止默认行为的代码(效果是:只让当前div滚动,连当前文档都不滚动的效果)
//用firefox变量表示火狐代理var firefox = navigator.userAgent.indexOf('Firefox') != -1;function MouseWheel(e){ ...
- ORA-39002 ORA-39070 ORA-29283 ORA-06512 ORA-29283
记一次expdp导出失败,报错如下 ORA-39002: invalid operation ORA-39070: Unable to open the log file. ORA-29283: in ...
- java如何获取本机IP
java如何获取本机IP import java.net.*; public class Test6 { public static void main(String[] args) { // TOD ...
- easyUI progressbar组件
easyUI progressbar组件: <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- Servlet 获取IllegelStateException
Servlet 获取IllegelStateException: response提交之后,进行requestDispatcher.forwar(),会产生这样的问题: 但是必须是outputStre ...
- HTML5画布(CANVAS)速查简表
HTML5画布(CANVAS)速查简表 http://www.webhek.com/misc/html5-canvas-cheat-sheet/
- IOS苹果手机上 iframe 滚动失效条问题,局部滚动开启弹性滚动!
html:bo<div class="scroll-wrapper"> <iframe src=""></iframe> & ...