上云无忧 > 文档中心 > 百度智能云移动直播SDK Android开发 - 特效直播
移动直播SDK
百度智能云移动直播SDK Android开发 - 特效直播

文档简介:
ARMediaStreamingPusher类控制AR直播推流的执行。内部封装这一套完整的音视频编码,打包,上传等功能。 其中AR直播管理类包含通用推流接口、及AR控制接口两部分。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

ARMediaStreamingPusher类控制AR直播推流的执行。内部封装这一套完整的音视频编码,打包,上传等功能。
其中AR直播管理类包含通用推流接口、及AR控制接口两部分。

1.1 AR直播实现流程

整个推流流程涉及的调用包括:AR推流器初始化、直播创建与销毁、直播状态控制、拍摄器与AR设置、及推流体验优化及状态访问五部分。

AR 直播关键步骤示例,具体可参考demo工程AnchorARActivity.java文件。

// 初始化AR直播推流器
mSession = new ARMediaStreamingPusher(this, mGlSurfaceView, liveConfig);
// 设置直播事件监听
mSession.setLiveEventListener(this);

// 初始化音视频采集设备
mSession.setupDevice(mOnCaptureReadyCallback);
// 配置推流地址、创建推流通道
mSession.configRtmpSession(mPushUrl);
// 在拍摄器就绪(onVideoCaptureReady)且推流通道连接后开始推流
public void onSessionConnected() {
    ... ...
if (mIsVideoCaptureReady && mIsLiveConnected) {
        // 开始推流
       mSession.startStreaming();
   }
}
    ... ...
// 退出直播 释放直播通道
// 停止推流
mSession.stopStreaming(); 
// 销毁推流通道
mSession.destroyRtmpSession();
// 释放音视频采集设备
mSession.releaseDevice();

1.2 AR推流器初始化

配置推流参数

LiveConfig.Builder builder = new LiveConfig.Builder();
builder.setCameraId(Camera.CameraInfo.CAMERA_FACING_FRONT) // 设置前置相机
        .setCameraOrientation(90) // 设置相机旋转角度
        .setVideoWidth(mWidth) // 设置视频采集与输出宽度(像素)
        .setVideoHeight(mHeight) // 设置视频采集与输出高度(像素)
        .setOrientation(mOrientation) // 设置屏幕方向
        .setVideoFPS(mFps) // 设置视频采集与输出帧率
        .setInitVideoBitrate(mBitrate) // 设置视频码率初始比特率
        .setQosEnabled(mEnableAutoBitrate) // 设置是否开启码率自适应
        .setMaxVideoBitrate(mMaxBitrate) // 设置码率自适应最大比特率
        .setMinVideoBitrate(mMinBitrate) // 设置码率自适应最小比特率
        .setVideoEnabled(true) // 设置是否推视频流
        .setAudioEnabled(true) // 设置是否推音频流
        .setAudioSampleRate(44100) // 设置音频采样率
        .setAudioBitrate(64000); // 设置音频比特率

builder.setPicStreamingEnabled(true); // 使能后台推流
if (mOrientation == LiveConfig.PORTRAIT) {
    builder.setPausePicPath("pause_streaming_portrait"); // 设置竖向暂停图片
} else {
    builder.setPausePicPath("pause_streaming_land"); // 设置横向暂停图片
}

初始化AR直播推流器

/**
 * AR媒体推流器构造函数
 * @param context 上下文环境
 * @param surfaceView 本地预览视窗
 * @param liveConfig 推流配置
 */
public ARMediaStreamingPusher(Context context, GLSurfaceView surfaceView, LiveConfig liveConfig)

注:AR 推流器使用GLSurfaceView 作用本地预览控件

设置直播事件监听

// 直播事件监听
public interface OnLiveEventListener {
    /**
     * 直播通道已经建立
     */
    void onSessionConnected();
    /**
     * 直播过程中出错
      *
     * @param errorCode 错误码
     */
    void onError(int errorCode);
}

// 错误码定义:
public interface BidirectRtmpEventListener {
    int ErrorCodeBase = -10000;
    //与服务器建立rtmp连接过程出错
    int ErrorCodeConnectToServerFailed = -10000;
// 创建rtmp推流通道出错
    int ErrorCodePulishStreamFailed = -20000;
    //Disconnect过程中出错
    int ErrorCodeDisconnectFromServerFailed = -30000;
    // 推流过程中,遇到未知错误导致推流失败
    int ErrorCodeUnknownStreamingError = -60000;
    /**
     * 推流过程中,遇到弱网情况导致推流失败
     * 收到此错误后,建议提示用户当前网络不稳定,
     * 如果反复收到此错误码,建议调用停止推流
     */
    int ErrorCodeWeakConnection = -70000;
    // Try again 重试
    int ErrorCodeWeakConnection_EAGAIN = -70011;
    // No buffer space available 没有可用的缓存空间
    int ErrorCodeWeakConnection_ENOBUFS = -70105;
    // Interrupted system call 中断的系统调用
    int ErrorCodeWeakConnection_EINTR = -70004;
    // Connection timed out 连接超时
    int ErrorCodeWeakConnection_ETIMEDOUT = -70110;
    /**
     * 推流过程中,遇到服务器网络错误导致推流失败
     * 收到此错误后,建议调用立即停止推流,并在服务恢复后再重新推流
     */
    int ErrorCodeServerNetworkError = -80000;
    // Connection reset by peer 连接被对方复位
    int ErrorCodeServerNetworkError_ECONNRESET = -80104;
    /**
     * 推流过程中,遇到设备断网导致推流失败,
     * 收到此错误后,建议提示用户检查网络连接,然后立即停止推流
     */
    int ErrorCodeLocalNetworkError = -90000;
    // Broken pipe 管道破裂
    int ErrorCodeLocalNetworkError_EPIPE = -90032;
    // Bad file number 错误文件编号
    int ErrorCodeLocalNetworkError_EBADF = -90009;
    // Network is down 网络已关闭
    int ErrorCodeLocalNetworkError_ENETDOWN = -90100;
    // Network is unreachable 网络不可达
    int ErrorCodeLocalNetworkError_ENETUNREACH = -90101;
    // License 失效
    int ErrorCodeLicenseInvalid = -100000;
                   ... ...
}

// 设置直播事件监听
public void setLiveEventListener(OnLiveEventListener listener)

1.3 直播创建与销毁

初始化音视频采集设备

/**
 * 拍摄器初始化回调
 */
public interface OnCaptureStateListener {
    //拍摄头尺寸变化
    void onCameraSizeChange(int width, int height);

   // 摄像头开启状态
    void onCameraOpenResult(boolean var1);

   // 拍摄器就绪回调接口
    void onVideoCaptureReady(boolean success);
}

// 初始化音视频采集设备
public void setupDevice(VideoCaptureSession.OnCaptureStateListener callback)

配置推流地址、创建推流通道

/**
 * 创建rtmp推流通道
 * @param pushUrl 推流地址
 * @return 推流通道创建是否成功
 */
public boolean configRtmpSession(String pushUrl)

销毁直播通道

// 销毁推流通道
public void destroyRtmpSession()

释放媒体采集设备

// 释放音视频采集设备
public void releaseDevice()

1.4 直播状态控制

开始推流

// 启动音视频编码 开始推流
public void startStreaming()

暂停推流

// 暂停推流, 如配置使能后台推流则开启图片推流否则暂停推流
public void pauseStreaming()

注:如使能了后台推流,则调用该接口进行图片推流,否则暂停音视频推流。

恢复推流

//恢复推流
public void resumeStreaming()

注:若如使能后台推流则停止图片推流恢复正常推流

结束推流

//关闭音视频编码器、结束推流
public void stopStreaming()

1.5 推流体验优化及其它

推流重连

// 推流重连
public void sessionReconnect()

示例: 在推流事件监听错误回调里根据错误类型发起推流重连。
public void onError(int errorCode) {
                ... ...
    // 非直播授权失效异常下发起外部重连
    if (errorCode != BidirectRtmpEventListener.ErrorCodeLicenseInvalid) {
        mSession.sessionReconnect();
    }
}

配置推流水印

WaterMarkConfig waterMarkConfig = new WaterMarkConfig("baidu_watermark", 100, 100, 0.04f, 0.98f);
mSession.setWaterMarkConfig(waterMarkConfig);

背景音乐
推流状态开启/关闭背景音乐,相关接口:

/**
 * 开始播放背景音乐
 * @param bgmPath 背景音乐本地路径
 * @param isLooping 是否循环播放
 */ 
public void startBGM(String bgmPath, boolean isLooping)

/**
 * 选择背景音乐区间, 默认从0 播放整首音乐
 *
 * @param clipStartInUSec    微秒
 * @param clipDurationInUSec 微秒
 */
private void configBGMClip(long clipStartInUSec, long clipDurationInUSec) 

/**
 * 设置本地mic采集音量的大小,默认是 1f
 *
 * @param gain 范围在 0f 到 1f 之间
 */
public void setRecordTrackGain(float gain)

/**
 * 设置背景音量的大小,默认是 1f
 *
 * @param gain 范围在 0f 到 1f 之间
 */
public void setBGMTrackGain(float gain)

// 暂停播放背景音乐
public void pauseBGM()

// 恢复背景音乐播放
public void resumeBGM()

// 停止播放背景音乐
public void stopBGM()

音视频源外部采集
直播SDK支持从外部导入音视频数据源,使用外部采集首先须使能音视频外部采集,然后分别使用如下接口开启视频外部采集、更新外部视频纹理(当前仅支持视频纹理输入方式)、更新音频数据(pcm 格式)。

/**
 * 开始外部视频采集, 有外部渲染控制
 * @param eglContext 外部视频渲染EglContext, sdk内部依赖eglconect 获理视频纹理
* @note 该接口一般在外部渲染器创建成功回调函数里调用
 */
@Override
public void startExtVideoDevice(EGLContext eglContext)

/**
 * 外部纹理更新导入接口
 * @param textureId 外部视频纹理id
 * @param width 预览视频宽度
 * @param height 预览视频高度
 */
public void onExtTextureUpdate(int textureId, int width, int height)

/**
 * 外部音频pcm 数据导入接口
 * @param bufferData 音频pcm数据
 * @param bufferInfo 音频数据信息
 */
public void onExtAudioFrameUpdate(ByteBuffer bufferData, MediaCodec.BufferInfo bufferInfo)

媒体采集数据回调
推流器支持将内部采集的音频数据(pcm)及视频数据(yuv nv21 / textureId)对外输出。

静音推流
推流过程关闭/开启音频流

/**
 * 是否静音推流
 * @param isMute 是否静音
 */
public void setMuteAudio(boolean isMute)

获取推流帧率

// 获取视频上传帧率
public double getUploadFps()

获取推流码率

// 获取媒体发送码率
public double getUploadBindwidthInKBps()

获取推流缓冲区水位

// 获取推流缓冲区百分比
public double getPacketCacheRate()

1.6 推流器(协议)选择

Rmtp推流器:ARMediaStreamingPusher

SRT推流器:SrtMediaStreamingPusher

SRT + AR推流器:ARSrtMediaStreamingPusher

相似文档
  • 直播SDK中集成了AR特效的能力,您可以选择下载您申请的license中的AR版本对应的SDK版本
  • 1 Demo下载: 直播APP: 我们提供直播demo APP供您体验直播能力,您可扫描以下二维码下载安装体验。 Android、 IOS, 下载demo需要密码,密码为:bdcloud
  • 开发类问题: 开发环境要求。 提示license过期。 美颜、美妆、贴纸等无效果。 需要录音权限。 本地添加贴纸。 内容制作类: 怎样制作特效贴纸? 有音乐资源吗?
  • Q:怎样制作特效贴纸? A:可提供适用于SDK的特效贴纸制作工具(支持人脸、手势、人像分割等)。工具面向设计师,采用可视化的界面、操作成本比较低,设计师即可独立完成内容的开发制作,极大的节省了技术开发资源。
  • 1、错误码BDCloudAVAuthFailure = 20000,可能是因为licenseID与.license不对应 ,请去官网比对。 2、错误码BDCloudAVAuthLicenseMiss = 20004,项目中没有找到.license文件。 3、错误码BDCloudAVAuthLicenseExpired = 20006,可能是licenseId配置成了包名,请区分licenseId与包名不同。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部