KSY Streamer Android SDK是金山云推出的 Android 平台上使用的软件开发工具包(SDK),帮助开发者快速实现稳定的视频直播的采集和推流功能。
金山云直播SDK是金山云提供的直播解决方案的一部分,完成了Android端音视频数据采集、处理、推流和播放的工作,金山云直播SDK不限制用户的推流、拉流地址。用户可以只使用金山云直播SDK而不使用金山云的云服务。
金山云直播SDK不收取任何授权使用费用,不含任何失效时间或者远程下发关闭的后门。同时金山云直播SDK也不要求ak/sk等鉴权,没有任何用户标识信息。
金山云直播SDK提供了业内一流的H.265编码、解码能力,对500+款设备进行了兼容性测试,经受住了大量业内一流的APP长时间线上运行的考验,免费使用,欢迎试用评估。
✓ 网络自适应,可根据实际网络情况动态调整目标码率,保证流畅性
✓ 推流协议:RTMP
✓ 预览与推流分辨率可分别自由设置 (new)
✓ 支持通过GLSurfaceView或TextureView进行预览 (new)
✓ 音视频目标码率:可设
✓ 支持动态横竖屏推流(new)
✓ 支持后台音频推流、后台音视频正常推流 (new)
✓ 支持前、后置摄像头动态切换
✓ 闪光灯:开/关
✓ 支持变焦功能 (new)
✓ 内置美颜功能 (性能大幅提升,软硬编下均有效)
✓ 自定义美颜滤镜 (软硬编下均有效)
✓ 内置美声
✓ 自定义音频滤镜 (new)
✓ 纯音频推流
✓ 音频升降调(new)
✓ 低延迟耳返 (new)
✓ 背景图推流 (new)
✓ 画笔推流(自定义android.view.View合成推流) (new)
✓ 开放 KSYStreamer 类的实现,开发者可自行组装各个模块 (new)
✓ 软编模式下支持场景编码(new)
✓ 连麦
✓ 画中画
✓ 开为大眼瘦脸(new)
✓ 相芯动态贴纸
✓ 悬浮窗推流
✓ 短视频编辑 (new)
✓ 硬编白名单
✓ 音频降噪(new)
✓ USB摄像头直播(new)
最低支持版本为Android 4.0 (API level 15)
支持的CPU架构:armv7, arm64, armeabi, x86
软编 |
硬编 |
软编兼容模式 |
|
基础推流 |
4.4 (19) |
4.3 (18) |
4.0 (15) |
网络自适应 |
4.4 (19) |
4.4 (19) |
4.0 (15) |
内建美颜滤镜 |
所有 |
所有 |
仅Denoise |
KSYLive_Android集成了 libksyplayer,具有播放SDK直播的所有功能,并且集成了 KSYStreamer,具有推流SDK所有功能。
如果使用直播推流、播放功能,请使用 KSYLive_Android ,无需单独集成 KSYStreamer。
当前推流 KSYStreamer支持以下体系结构:
armeabi
armeabi-v7a
arm64-v8a
x86
为了节省apk size,如果没有特殊缘由,请只集成armeabi-v7a版本。
只集成armeabi-v7a版本,会导致ARMv5 ARMv6 设备不能运行。如果APP需要适配这两类设备,需要额外集成armebi版本。 ARMv5 ARMv6 设备计算性能较差,金山云不保证该芯片设备上的直播体验。不推荐直播APP视频适配该两款芯片设备。
本章节提供一个快速集成金山云推流SDK基础功能的示例。
更详细的文档地址:https://github.com/ksvc/KSYStreamer_Android/wiki
具体可以参考demo工程中的相应文件。
demo: 示例工程,演示本SDK主要接口功能的使用
libs: 集成SDK需要的所有库文件
libs/[armeabi-v7a|arm64-v8a|x86]
: 各平台的so库
libs/ksylive.jar
: 融合SDK jar包
引入目标库, 将libs目录下的库文件引入到目标工程中并添加依赖。
可参考下述配置方式(以Android Studio为例):
导入SDK
推荐直接使用gradle方式集成:
# required
allprojects {
repositories {
jcenter()
}
}
dependencies {
# required, enough for most devices.
compile 'com.ksyun.media:libksylive-java:2.4.4'
compile 'com.ksyun.media:libksylive-armv7a:2.4.4'
# Other ABIs: optional
compile 'com.ksyun.media:libksylive-arm64:2.4.4'
compile 'com.ksyun.media:libksylive-x86:2.4.4'
}
手动下载集成
将libs目录copy到目标工程的根目录下;
修改目标工程的build.gradle文件,配置jniLibs路径:
sourceSets {
main {
...
jniLibs.srcDir 'libs'
}
...
}
修改proguard(混淆)文件,添加如下规则:
-keep class com.ksyun.** { *; } -keep class com.ksy.statlibrary.** { *; }
在AndroidManifest.xml文件中申请相应权限
<!-- 使用权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_SINTERNETWIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 硬件特性 -->
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
将demo assets目录下的资源文件copy到目标工程的assets目录下
具体可参考demo工程中的 com.ksyun.media.streamer.demo.CameraActivity
类.
在布局文件中加入预览View, 当前支持GLSurfaceView和TextureView
<android.opengl.GLSurfaceView
android:id="@+id/camera_preview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentTop="true" />
初始化预览View
GLSurfaceView mCameraPreview = (GLSurfaceView)findViewById(R.id.camera_preview);
创建KSYStreamer实例并配置推流相关参数
// 创建KSYStreamer实例
mStreamer = new KSYStreamer(this);
// 设置预览View
mStreamer.setDisplayPreview(mCameraPreview);
// 设置推流url(需要向相关人员申请,测试地址并不稳定!)
mStreamer.setUrl("rtmp://test.uplive.ksyun.com/live/{streamName}");
// 设置预览分辨率, 当一边为0时,SDK会根据另一边及实际预览View的尺寸进行计算
mStreamer.setPreviewResolution(480, 0);
// 设置推流分辨率,可以不同于预览分辨率(不应大于预览分辨率,否则推流会有画质损失)
mStreamer.setTargetResolution(480, 0);
// 设置预览帧率
mStreamer.setPreviewFps(15);
// 设置推流帧率,当预览帧率大于推流帧率时,编码模块会自动丢帧以适应设定的推流帧率
mStreamer.setTargetFps(15);
// 设置视频码率,分别为初始平均码率、最高平均码率、最低平均码率,单位为kbps,另有setVideoBitrate接口,单位为bps
mStreamer.setVideoKBitrate(600, 800, 400);
// 设置音频采样率
mStreamer.setAudioSampleRate(44100);
// 设置音频码率,单位为kbps,另有setAudioBitrate接口,单位为bps
mStreamer.setAudioKBitrate(48);
/**
* 设置编码模式(软编、硬编),请根据白名单和系统版本来设置软硬编模式,不要全部设成软编或者硬编,白名单可以联系金山云商务:
* StreamerConstants.ENCODE_METHOD_SOFTWARE
* StreamerConstants.ENCODE_METHOD_HARDWARE
*/
mStreamer.setEncodeMethod(StreamerConstants.ENCODE_METHOD_SOFTWARE);
// 设置屏幕的旋转角度,支持 0, 90, 180, 270
mStreamer.setRotateDegrees(0);
// 设置开始预览使用前置还是后置摄像头
mStreamer.setCameraFacing(CameraCapture.FACING_FRONT);
创建推流事件监听
Note
|
所有回调均运行在KSYStreamer的创建线程,建议在主线程中进行,开发者可以直接在回调中操作 KSYStreamer的相关接口,但不要在这些回调中做任何耗时的操作。 |
// 设置Info回调,可以收到相关通知信息
mStreamer.setOnInfoListener(new KSYStreamer.OnInfoListener() {
@Override
public void onInfo(int what, int msg1, int msg2) {
// ...
}
});
// 设置错误回调,收到该回调后,一般是发生了严重错误,比如网络断开等,
// SDK内部会停止推流,APP可以在这里根据回调类型及需求添加重试逻辑。
mStreamer.setOnErrorListener(new KSYStreamer.OnErrorListener() {
@Override
public void onError(int what, int msg1, int msg2) {
// ...
}
});
开始推流
Note
|
初次开启预览后需要在OnInfoListener回调中收到
StreamerConstants.KSY_STREAMER_CAMERA_INIT_DONE
事件后调用方才有效。 |
mStreamer.startStream();
推流开始前及推流过程中可动态设置的常用方法
// 切换前后摄像头
mStreamer.switchCamera();
// 开关闪光灯
mStreamer.toggleTorch(true);
// 设置美颜滤镜,关于美颜滤镜的具体说明请参见专题说明
mStreamer.getImgTexFilterMgt().setFilter(mStreamer.getGLRender(),
ImgTexFilterMgt.KSY_FILTER_BEAUTY_DENOISE);
停止推流
mStreamer.stopStream();
Activity生命周期的回调处理
public class CameraActivity extends Activity {
// ...
@Override
public void onResume() {
super.onResume();
// 一般可以在onResume中开启摄像头预览
mStreamer.startCameraPreview();
// 调用KSYStreamer的onResume接口
mStreamer.onResume();
// 如果onPause中切到了DummyAudio模块,可以在此恢复
mStreamer.setUseDummyAudioCapture(false);
}
@Override
public void onPause() {
super.onPause();
mStreamer.onPause();
// 一般在这里停止摄像头采集
mStreamer.stopCameraPreview();
// 如果希望App切后台后,停止录制主播端的声音,可以在此切换为DummyAudio采集,
// 该模块会代替mic采集模块产生静音数据,同时释放占用的mic资源
mStreamer.setUseDummyAudioCapture(true);
}
@Override
public void onDestroy() {
super.onDestroy();
// 清理相关资源
mStreamer.release();
}
}
类型 | 描述 |
---|---|
SDK名称 |
KSYLive_android |
SDK版本 |
v2.5.0 |
设备型号 |
oppo r9s |
OS版本 |
Android 6.0.1 |
问题描述 |
描述问题出现的现象 |
操作描述 |
描述经过如何操作出现上述问题 |
额外附件 |
文本形式控制台log、crash报告、其他辅助信息(界面截屏或录像等) |
主页: 金山云
QQ讨论群:
574179720 [视频云技术交流群]
620036233 [视频云Android技术交流]
以上两个加一个QQ群即可
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。