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代码会稍有延迟):

SDK下载请单击

功能试用:

下载以下demo应用,可以进行功能试用。

点击下载

关于授权:

www.rdsdk.com 致力于专业的人做专业的事,降低客户的开发时间和开发成本,你只需要支付很少的费用,花上几个小时就能增加直播及回放功能。

单击申请试用

开发文档:

点击查看

JAVA接口文档:

点击查看

洽谈咨询:

SDK交流群: 305128688

咨询电话: 4008989105

客服电话: 15313066905 (周一至周五 9:00-18:00)

客服邮箱:2637433751@qq.com

Android 视频直播 SDK的更多相关文章

  1. Android 视频编辑 SDK

    Android 视频编辑 SDK接入说明 一.名词解释 分辨率:用于计算机视频处理的图像,以水平和垂直方向上所能显示的像素数来表示分辨率.常见视频分辨率的有1080P即1920x1080,720P即1 ...

  2. 视频直播SDK-ios版

    IOS视频直播接入说明 一.名词解释 分辨率:用于计算机视频处理的图像,以水平和垂直方向上所能显示的像素数来表示分辨率.常见视频分辨率的有1080P即1920x1080,720P即1080x720,6 ...

  3. iOS/Android 视频编辑SDK

    锐动天地为开发者提供短视频编辑.特效.直播.录屏.编解码.视频转换,等多种解决方案,涵盖PC.iOS.Android多平台.以市场为导向,不断打磨并创新技术,在稳定性,兼容性,硬件设备效率优化上千捶百 ...

  4. Android视频直播解决方案(rstp、udp)

    做局域网视频直播有两种方案,通过rstp或udp协议. 1.rstp协议,网络上有个开源项目,基于Android,且这个项目也是一个服务端,里面也集成了http访问页面,可以通过http或者rstp直 ...

  5. 带着问题写React Native原生控件--Android视频直播控件

    最近在做的采用React Native项目有一个需求,视频直播与直播流播放同一个布局中,带着问题去思考如何实现,能更容易找到问题关键点,下面分析这个控件解决方法: 现在条件:视频播放控件(开源的ijk ...

  6. Android视频直播全屏实现

    /** * 添加直播组件 */ @SuppressLint("JavascriptInterface") private void addPlayerLive(final Subj ...

  7. Android视频直播:流媒体服务器搭建

    一.前言 实时视频直播是这两年非常火的技术形态,已经渗透到教育.在线互娱等各种业务场景中.但要搭建一套实时视频直播系统,并非易事,下面针对直播系统的的搭建做一下说明: 1.1 通常的直播系统的技术模型 ...

  8. Android中直播视频技术探究之---采集摄像头Camera视频源数据进行推流(采用金山云SDK)

    一.前言 在之前已经详细介绍了Android中的一种视频数据源:Camera,不了解的同学可以点击进入:Android中Camera使用详解 ,在这篇文章中我们介绍了如何采集摄像头的每一帧数据,然后进 ...

  9. 「视频直播技术详解」系列之七:直播云 SDK 性能测试模型

    ​关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 本系列文章大纲如下: ...

随机推荐

  1. ReactiveCocoa 设置绑定注意事项

    要在ViewLoad里面进行绑定,因为在init中还没有初始化界面,所有绑定会无效

  2. referrer vs referer

    http request里面是referer 其实是http规范拼写错了,正确的拼写应该是referrer

  3. 【HDU 5808】 Price List Strike Back (整体二分+动态规划)

    Price List Strike Back There are nn shops numbered with successive integers from 11 to nn in Bytelan ...

  4. 滚轮事件的防冒泡、阻止默认行为的代码(效果是:只让当前div滚动,连当前文档都不滚动的效果)

    //用firefox变量表示火狐代理var firefox = navigator.userAgent.indexOf('Firefox') != -1;function MouseWheel(e){ ...

  5. 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 ...

  6. java如何获取本机IP

    java如何获取本机IP import java.net.*; public class Test6 { public static void main(String[] args) { // TOD ...

  7. easyUI progressbar组件

    easyUI progressbar组件: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  8. Servlet 获取IllegelStateException

    Servlet 获取IllegelStateException: response提交之后,进行requestDispatcher.forwar(),会产生这样的问题: 但是必须是outputStre ...

  9. HTML5画布(CANVAS)速查简表

    HTML5画布(CANVAS)速查简表 http://www.webhek.com/misc/html5-canvas-cheat-sheet/

  10. IOS苹果手机上 iframe 滚动失效条问题,局部滚动开启弹性滚动!

    html:bo<div class="scroll-wrapper"> <iframe src=""></iframe> & ...