logologo
售前咨询
直播云
产品简介
产品定价
控制台操作指南
客户端SDK
服务端API
相关协议
文档中心
客户端SDKAndroid快速接入指南

Android快速接入指南


本文介绍如何在 Android 端使用 溪流湖直播推流 SDK 快速实现直播推流。详细接口文档及说明请点开查看 Android端推流SDK

前提条件

  • Android Studio 3.0 或以上版本
  • Android SDK API 等级 16 或以上
  • Android 4.1 或以上版本的设备
  • 有效的 直播云 账户 和 App ID

准备开发环境

本节介绍如何创建项目,将 溪流湖直播推流SDK 集成进您的项目中,并添加必要的设备权限。

1.创建 Android 项目

参考以下步骤创建一个 Android 项目。若已有 Android 项目,可以直接查看 2.集成 SDK。

  1. 打开 Android Studio,点击 Start a new Android Studio project。
  2. 在 Select a Project Template 界面,选择 Phone and Tablet > Empty Activity,然后点击 Next。
  3. 在 Configure Your Project 界面,依次填入以下内容:
  • Name:您的 Android 项目名称,如 HelloArya
  • Package name:您的项目包的名称,如 io.krtc.helloarya
  • Save location:项目的存储路径
  • Language:项目的编程语言,如 Java
  • Minimum API level:项目的最低 API 等级
  1. 然后点击 Finish。根据屏幕提示,安装可能需要的插件。

2.集成 SDK

将 SDK 包内 libs 路径下的如下文件,拷贝到您的项目路径下:

文件或文件夹 项目路径
krtc-6.xx.aar 文件 /app/libs/

在 /app/build.gradle 文件中添加 aar 依赖和必要的第三方库,如下:

android {
    ...
    defaultConfig{
        ...
        ndk {
            abiFilters 'armeabi-v7a'
        }
    }
}

repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies{
    implementation(name:'krtc-5.xx.aar', ext:'aar')
}

3.添加项目权限

根据场景需要,在 /app/src/main/AndroidManifest.xml 文件中添加如下行,获取相应的设备权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
   <uses-permission android:name="android.permission.INTERNET" />
   <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
   <uses-permission android:name="android.permission.CAMERA" />
   <uses-permission android:name="android.permission.RECORD_AUDIO" />
   <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
   <uses-permission android:name="android.permission.BLUETOOTH" />
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
   ...
</manifest>

实现直播推流

本节介绍如何实现直播推流。直播推流的 API 调用时序见下图:
image.png

1.创建通话用户界面

根据场景需要,为您的项目创建视频通话的用户界面。若已有界面,可以直接查看 2.导入类。
我们推荐您添加如下 UI 元素来实现一个视频通话:

  • 本地视频窗口
  • 停止直播按钮

2.导入类

在项目通话的 Activity 文件中添加如下行:

import com.kwai.video.krtc.rtcengine.IKRtcEngineEventHandler;
import com.kwai.video.krtc.rtcengine.KRtcEngine;
import com.kwai.video.krtc.rtcengine.KRtcEngineConfig;
import com.kwai.video.krtc.rtcengine.camera.KVideoCanvas;

获取设备权限

在启动 Activity 时检查并获取 Android 移动设备的摄像头和麦克风使用权限。

private static final int PERMISSION_REQ_ID = 33;

// App 运行时确认麦克风和摄像头设备的使用权限。
private static final String[] REQUESTED_PERMISSIONS = {
        Manifest.permission.RECORD_AUDIO,
        Manifest.permission.CAMERA
};
    
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_video_call);
    
    // 获取权限后,初始化 KRtcEngine,并开始直播。
    if (checkSelfPermission(REQUESTED_PERMISSIONS[0], PERMISSION_REQ_ID) &&
            checkSelfPermission(REQUESTED_PERMISSIONS[1], PERMISSION_REQ_ID)) {
        initKRtcEngineAndStartLivePush();
    }
}
    
private void initKRtcEngineAndStartLivePush() {
     initKRtcEngine();
     initLocalVideo();
  	 setupMediaParameters();
     startLivePush();
}
    
private boolean checkSelfPermission(String permission, int requestCode) {
    if (ContextCompat.checkSelfPermission(this, permission) !=
            PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, REQUESTED_PERMISSIONS, requestCode);
        return false;
    }
    return true;
}

4.初始化 KRtcEngine

在调用其他 KRtcEngine API 前,需要创建并初始化 KRtcEngine 对象。
您还可以根据场景需要,在初始化时注册想要监听的回调事件,如直播推流状态回调。 注意:不要在这些回调中进行 UI 操作,需要在主线程中进行 UI 操作。

private void initKRtcEngine() {
    KRtcEngineConfig config = new KRtcEngineConfig();
    config.mAppId = "appID";      // 必填,申请的 appID
    config.mContext = getApplicationContext(); // 必填
    config.mHandler = new IKRtcEngineEventHandler() { // 设置事件监听
            @Override
            public void onPushStreamStateChanged(String channelId, @PushStreamState int state, @PushStreamError int error) {
                super.onPushStreamStateChanged(channelId, state, error);
                switch(state) {
                    case PushStreamState.KPushStreamStateRunning:
                        // do sth.
                        break;
                    case PushStreamState.KPushStreamStateFailed:
                        // do sth.
                        break;
                    default:
                        break;
                }
            }
        };
    // 设置日志路径
    config.mLogConfig = new KRtcEngineConfig.KLogConfig();
    config.mLogConfig.fillePath = "/sdcard/krtc_sdk_logs/krtc.log";
    try {
        rtcEngine = KRtcEngine.create(config);
    } catch (Exception e) {
        e.printStackTrace();
    }
    ...
}

5.设置本端视图并启动预览

成功初始化 KRtcEngine 对象后,需要在开始直播前设置本地视图,以便开启摄像头在直播中看到本端视频。参考以下步骤设置本端视图:
调用 enableVideo 方法启用视频模块。 根据需要调用 createLocalSurfaceView 方法创建一个 SurfaceView 对象,或者调用 createLocalTextureView 方法创建一个 TextureView 对象。 然后用创建的 view 和其他相关参数初始化一个 KvideoCanvas 对象来调用 bindLocalVideoView 方法绑定本地视频预览画布,最后调用 startPreview 开启摄像头预览。

private void initLocalVideo() {
    rtcEngine.enableVideo();

    // 创建 SurfaceView 对象
    private FrameLayout mLocalContainer;
    SurfaceView mLocalView = RtcEngine.createLocalSurfaceView(mContext);

    // 添加视图 UI
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(500, 500);
    layoutParams.topMargin = 10;
    layoutParams.bottomMargin = 10;
    mLocalView.setZOrderMediaOverlay(true);
    mLocalContainer.addView(mLocalView, layoutParams);
    
    // 设置本地视图
    mRtcEngine.bindLocalVideoView(new KVideoCanvas(mLocalView, RenderMode.KScaleToFit, mUserId, VideoSourceType.KVideoSourceTypePeople));

    // 启动预览
    rtcEngine.startPreview();
}

6. 设置音视频编码参数

调用 setVideoEncoderConfiguration 设置视频编码的分辨率,码率,帧率等参数;调用 setLiveAudioProfile 设置音频相应 profile。

private void setupMediaParameters() {
  	// 设置视频编码参数
    KRtcEngine.VideoEncoderConfiguration config = new KRtcEngine.VideoEncoderConfiguration(720, 1280, 15, 2000);
    rtcEngine.setVideoEncoderConfiguration:("YourChannelId", config);
  	// 设置音频编码参数
  	rtcEngine.setLiveAudioProfile("YourChannelId", LiveAudioProfile.KLiveAudioProfileMusicHigherQualityStereo);
}

7.开始直播

完成初始化和设置本地视图后,您就可以调用 startPush 方法开始直播。您需要在该方法中传入如下参数:

  • token:传入用于鉴权的 Token,获取方式:在控制台里创建应用获取对应的 AppID 和 token;或者从业务方服务器获取的动态token。
  • channelID:传入能标识频道的自定义频道 ID。
  • streamUrl: 业务层根据指定规则生成,例如:
    image.png
private void startLivePush() {
   ...
   rtcEngine.startPush("TOKEN", "CHANNELID", "STREAM_URL");
   ...
}

8.停止直播

根据场景需要,如停止直播、关闭 App 或 App 切换至后台时,调用 stopPush 停止直播。

@Override
protected void onDestroy() {
    super.onDestroy();
    if (rtcEngine != null) {
        // 停止直播
        rtcEngine.stopPush("CHANNELID");
        // 在不需要使用 SDK 时销毁实例
        KRtcEngine.destroy();
    }
}

运行项目

在 Android 设备中运行该项目。当直播推流成功后,您可以看到本地视频,同时可以用 ffplay 等工具拉取到直播流(拉流地址由业务层根据指定规则生成)。

上一篇:访问监控下一篇:iOS快速接入指南
该篇文档内容是否对您有帮助?
有帮助没帮助