同步操作将从 金山视频云/KSYStreamer_Android 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
KSY Streamer Android SDK是金山云推出的 Android 平台上使用的软件开发工具包(SDK), 负责视频直播的采集和推流。
软硬编部分功能版本需求列表:
软编 | 硬编 | |
---|---|---|
基础推流 | 4.0 (15) | 4.3 (18) |
网络自适应 | 4.0 (15) | 4.4 (19) |
本章节提供一个快速集成金山云推流SDK基础功能的示例。更详细的文档地址:https://github.com/ksvc/KSYStreamer_Android/wiki
具体可以参考demo工程中的相应文件。
从github下载SDK及demo工程: https://github.com/ksvc/KSYStreamer_Android.git
http://git.oschina.net/ksvc/KSYStreamer_Android 对于部分地方访问github比较慢的情况,可以从oschina clone,获取的库内容和github一致。
$ git clone https://git.oschina.net/ksvc/KSYStreamer_Android.git
引入目标库, 将libs目录下的库文件引入到目标工程中并添加依赖。
可参考下述配置方式(以Android Studio为例):
sourceSets {
main {
...
jniLibs.srcDir 'libs'
}
...
}
-keep class com.ksy.recordlib.** { *;}
<!-- 使用权限 -->
<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工程中的com.ksy.recordlib.demo.CameraActivity
类
<com.ksy.recordlib.service.view.CameraGLSurfaceView
android:id="@+id/camera_preview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentTop="true" />
GLSurfaceView mCameraPreview = (GLSurfaceView)findViewById(R.id.camera_preview)
KSYStreamerConfig.Builder builder = new KSYStreamerConfig.Builder();
// 设置推流url(需要向相关人员申请,测试地址并不稳定!)
builder.setmUrl("rtmp://test.uplive.ksyun.com/live/{streamName}");
/**
* 设置推流分辨率,支持以下值:
* RecorderConstants.VIDEO_RESOLUTION_360P
* RecorderConstants.VIDEO_RESOLUTION_480P
* RecorderConstants.VIDEO_RESOLUTION_540P
* RecorderConstants.VIDEO_RESOLUTION_720P
*/
builder.setVideoResolution(RecorderConstants.VIDEO_RESOLUTION_360P);
// 设置视频帧率
builder.setFrameRate(15);
// 设置视频码率(分别为最大、最小、初始码率, 单位为kbps)
builder.setMaxAverageVideoBitrate(800);
builder.setMinAverageVideoBitrate(200);
builder.setInitAverageVideoBitrate(500);
// 设置音频码率(单位为kbps)
builder.setAudioBitrate(48);
// 设置音频采样率(硬编模式下暂时无效)
builder.setSampleAudioRateInHz(44100);
/**
* 设置编码模式(软编、硬编), 支持的类型:
* KSYStreamerConfig.ENCODE_METHOD.SOFTWARE
* KSYStreamerConfig.ENCODE_METHOD.HARDWARE
*/
builder.setEncodeMethod(KSYStreamerConfig.ENCODE_METHOD.SOFTWARE);
// 设置是否采用横屏模式
builder.setDefaultLandscape(false);
// 开启推流统计功能
builder.setEnableStreamStatModule(true);
// 创建KSYStreamerConfig对象
KSYStreamerConfig config = builder.build();
注意:所有回调直接运行在产生事件的各工作线程中,不要在该回调中做任何耗时的操作,或者直接调用推流API。
public StreamStatusEventHandler.OnStatusErrorListener mOnStatusErrorListener = new StreamStatusEventHandler.OnStatusErrorListener() {
@Override
public void onError(int what, int arg1, int arg2, String msg) {
//what is the status flag, msg may be null
switch (what) {
// ...
}
}
}
public StreamStatusEventHandler.OnStatusInfoListener mOnStatusInfoListener = new StreamStatusEventHandler.OnStatusInfoListener() {
@Override
public void onInfo(int what, int arg1, int arg2, String msg) {
//what is the status flag, msg may be null
switch (what) {
// ...
}
}
}
mStreamer = new KSYStreamer(this);
mStreamer.setConfig(config);
mStreamer.setDisplayPreview(mCameraPreview);
mStreamer.setOnStatusListener(mOnStatusListener);
mStreamer.startStream();
// 切换前后摄像头
mStreamer.switchCamera();
// 开关闪光灯
mStreamer.toggleTorch(true);
// 设置美颜滤镜,关于美颜滤镜的具体定义值及说明请参见后续章节
mStreamer.setBeautyFilter(RecorderConstants.FILTER_BEAUTY_DENOISE);
mStreamer.stopStream();
public class CameraActivity extends Activity {
// ...
@Override
public void onResume() {
super.onResume();
mStreamer.onResume();
}
@Override
public void onPause() {
super.onPause();
mStreamer.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
mStreamer.onDestroy();
}
}
如有其它需求可以联系我们 ##反馈与建议
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。