Table of Contents

上一个主题

HTTP API

下一个主题

iOS推流SDK使用文档

本页

Android推流SDK使用文档

简介

Android 推流 SDK (以下简称“推流 SDK”) 使用百度推出的 Android 推流SDK,为您提供简单、便捷的开发接口,助您在基于 Android 2.3.3及以上版本的移动设备上实现直播推流功能。https://bce.baidu.com/doc/LSS/Android-Capture-SDK.html#.E6.8E.A8.E6.B5.81.20SDK.20.E5.BC.80.E5.8F.91.E6.8C.87.E5.8D.97

准备

  • 下载最新的Android 推流 SDK。
  • 适配 CPU 指令集:armv7/armv7a、arm64。

添加依赖:

将 libs 目录复制到 Eclipse 工程根目录,注意根据所支持的 arm版本选择对应的动态链接库。

权限声明:

请您在 Android App 的 AndroidManifest.xml 中声明如下权限:

<uses-feature android:name="android.hardware.camera" />
<!-- 申明应用需要用到相机 -->
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<!-- 申明应用需要用到自动对焦 -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- 申请相机使用权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- 申明录音权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 申明网络权限 -->

QUICK START

  • 初始化 LiveSession

LiveSession是对视频采集、编码、推流等功能模块接口进行封装后的接口类,为您提供友好的编程接口。

LiveSession mLiveSession = new LiveSession(MainActivity.this);
// 使用该初始化接口后,默认采用后置摄像头采集,视频编码、音频编码均使用默认参数
// 如需定制其他参数请使用附录其他两种方式初始化
  • 设置预览 View

初始化成功后,使用bindPreviewDisplay 接口为 LiveSession 对象设置预览View,否则无法启动相机。

SurfaceView cameraView = (SurfaceView) findViewById(R.id.cameraView);
mLiveSession.bindPreviewDisplay(cameraView.getHolder());
  • 启动音视频采集设备

在开始推流前,我们还需要启动音视频采集设备(即相机和 MIC)。

mLiveSession.prepareSessionAsync();
  • 开始推流

当采集设备成功启动后(即收到 onSessionPrepared 回调后,参考附录处理推流SDK 状态变化事件),可以通过调用 startRtmpSession方法设置推流地址并开始推流。 推流URL的具体值为你从新浪云视频直播服务获得的推送地址,例如: rtmp://xxxx。

final String url1 = "rtmp://xxxx";
if (mLiveSession.startRtmpSession(url1)) {
    Log.d(TAG, "Starting Streaming in right state!");
} else {
    Log.e(TAG, "Starting Streaming in wrong state!");
}
  • 结束推流

    mLiveSession.stopRtmpSession();

附录

  • 推流 SDK 提供如下三种方法完成初始化:

使用 LiveSession(Context cxt)

LiveSession mLiveSession = new LiveSession(MainActivity.this);
// 使用该初始化接口后,默认采用后置摄像头采集
// 视频编码参数为720p@24fps、码率1024kbps
// 音频编码参数为双声道、采样率44.1khz、码率64kbps

使用 LiveSession(Context cxt, int width, int height, int fps, int bitrate)

LiveSession mLiveSession = new LiveSession(this, 640, 480, 15, 512000);
// 使用该初始化接口后,仍然采用后置摄像头采集
// 分辨率、帧率、码率将使用用户传入的参数
// 本示例代码所设置的视频编码参数为分辨率640x480、帧率15fps、码率512kbps
// 音频编码参数仍为默认值(双声道、采样率44.1khz、码率64kbps)

使用LiveSession(Context cxt, int width, int height, int fps, int bitrate, int cameraId)

int cameraId = Camera.CameraInfo.CAMERA_FACING_FRONT;
LiveSession mLiveSession = new LiveSession(this, 1280, 720, 15, 1024000, cameraId);
// 如示例代码中,使用该初始化接口后,将采用前置摄像头采集
// 同时设置了视频的分辨率、帧率、码率
// 音频编码参数仍为默认值(双声道、采样率44.1khz、码率64kbps)
  • 处理推流 SDK 状态变化事件:

在推流 SDK 中,我们定义了名为 SessionStateListener 的interface,您可以实现该接口并将其传递给 LiveSession 对象(通过调用setStateListener 接口实现),这样就可以实时接收到推流 SDK的一些属性及状态更新信息。

interface 定义如下:

public interface SessionStateListener {

    /**
     * 录制设备准备完毕
     * @param code 固定为RESULT_CODE_OF_OPERATION_SUCCEEDED
     */
    void onSessionPrepared(int code);

    /**
     * 推流开始后的回调
     * @param code 固定为RESULT_CODE_OF_OPERATION_SUCCEEDED
     */
    void onSessionStarted(int code);

    /**
     * 推流结束后的回调
     * @param code 固定为RESULT_CODE_OF_OPERATION_SUCCEEDED
     */
    void onSessionStopped(int code);

    /**
     * 推流 SDK 出错后的回调
     * @param code 错误类型如下:
     *                ERROR_CODE_OF_OPEN_MIC_FAILED
     *                ERROR_CODE_OF_OPEN_CAMERA_FAILED
     *                ERROR_CODE_OF_PREPARE_SESSION_FAILED
     *                ERROR_CODE_OF_CONNECT_TO_SERVER_FAILED
     *                ERROR_CODE_OF_DISCONNECT_FROM_SERVER_FAILED
     *                ERROR_CODE_OF_UNKNOWN_STREAMING_ERROR
     *                ERROR_CODE_OF_PACKET_REFUSED_BY_SERVER
     *                ERROR_CODE_OF_WEAK_CONNECTION
     *                ERROR_CODE_OF_SERVER_INTERNAL_ERROR
     *                ERROR_CODE_OF_CONNECTION_TIMEOUT
     */
    void onSessionError(int code);
}

注意:prepareSessionAsync、startRtmpSession、stopRtmpSession均为异步接口,即接口被调用后,不会立即得到结果,需要实现SessionStateListener interface侦听回调结果。如果执行成功,onSessionPrepared、onSessionStarted、onSessionStopped方法将分别被调用,且参数固定为RESULT_CODE_OF_OPERATION_SUCCEEDED。如果执行失败,只有onSessionError 方法将被调用,参数及意义如下:

ERROR_CODE_OF_OPEN_MIC_FAILED // MIC设备无法打开
ERROR_CODE_OF_OPEN_CAMERA_FAILED // 相机设备无法打开
ERROR_CODE_OF_PREPARE_SESSION_FAILED // onSessionPrepared 接口调用失败,原因只能是 MIC 或相机打开失败
ERROR_CODE_OF_CONNECT_TO_SERVER_FAILED // startRtmpSession 接口调用失败,原因通常为连接不上推流服务器
ERROR_CODE_OF_DISCONNECT_FROM_SERVER_FAILED // stopRtmpSession 接口调用失败,原因通常是网络异常
复制

另外,在推流过程中,如果遇到数据包发送失败的情况时,onSessionError 方法也将被调用,参数及意义如下:

ERROR_CODE_OF_UNKNOWN_STREAMING_ERROR // 未知的推流错误,建议收到此参数后立即结束推流
ERROR_CODE_OF_PACKET_REFUSED_BY_SERVER // 服务器拒绝错误,建议检查推流地址是否为百度开放云的地址
ERROR_CODE_OF_WEAK_CONNECTION // 弱网错误,建议收到此参数后提示用户网络不稳定
ERROR_CODE_OF_SERVER_INTERNAL_ERROR // 服务器错误,建议收到此参数后立即结束推流,并在服务器恢复后再尝试推流
ERROR_CODE_OF_CONNECTION_TIMEOUT // 连接超时,建议收到此参数后提示用户已经断网