Skip to content

dotengine_android_sdk

notedit edited this page May 7, 2017 · 1 revision

2016-12-01 更新

SDK 使用

dotEngine Android SDK 提供以aar格式打包的库. 导入到项目中即可以使用.

需要开启的权限为:


<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="21"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

SDK API

SDK API 主要包括两部分, DotEngineDotEngineListener

DotEngine

创建DotEngine 实例

boolean sharedInstanceWithListener(Context context, final DotEngineListener listener);

该方法创建一个DotEngine的实例, listener 为DotEngineListener 类.

设置本地音视频发送质量

void setupVideoProfile(DotEngineVideoProfileType dotEngineVideoProfileType);

dotEngine设置了多种视频传输质量来适配各种使用场景. 此方法可以设置本地视频的传输质量. 此方法需要在开启本地音视频之前调用. DotEngineVideoProfile 默认为DotEngine_VideoProfile_240P.

DotEngineVideoProfile的种类为:

    //                              w    h   fps  bits
    DotEngine_VideoProfile_120P(0, 160, 120, 15, 80),
    DotEngine_VideoProfile_120P_2(1, 120, 160, 15, 80),
    DotEngine_VideoProfile_120P_3(2, 120, 120, 15, 60),
    DotEngine_VideoProfile_180P(10, 320, 180, 15, 160),
    DotEngine_VideoProfile_180P_2(11, 180, 320, 15, 160),
    DotEngine_VideoProfile_180P_3(12, 180, 180, 15, 120),
    DotEngine_VideoProfile_240P(20, 320, 240, 15, 200),
    DotEngine_VideoProfile_240P_2(21, 240, 320, 15, 200),
    DotEngine_VideoProfile_240P_3(22, 240, 240, 15, 160),
    DotEngine_VideoProfile_360P(30, 640, 360, 15, 400),
    DotEngine_VideoProfile_360P_2(31, 360, 640, 15, 400),
    DotEngine_VideoProfile_360P_3(32, 360, 360, 15, 300),
    DotEngine_VideoProfile_480P(40, 640, 480, 15, 500),
    DotEngine_VideoProfile_480P_2(41, 480, 640, 15, 500),
    DotEngine_VideoProfile_480P_3(42, 480, 480, 15, 400),
    DotEngine_VideoProfile_480P_4(43, 640, 480, 30, 750),
    DotEngine_VideoProfile_480P_5(44, 480, 640, 30, 750),
    DotEngine_VideoProfile_480P_6(45, 480, 480, 30, 680),
    DotEngine_VideoProfile_480P_7(46, 640, 480, 15, 1000),
    DotEngine_VideoProfile_720P(50, 1280, 720, 15, 1000),
    DotEngine_VideoProfile_720P_2(51, 720, 1280, 15, 1000),
    DotEngine_VideoProfile_720P_3(52, 1280, 720, 30, 1700),
    DotEngine_VideoProfile_720P_4(53, 720, 1280, 30, 1700),

开启本地音视频

boolean startLocalMedia();

该方法初始化本地的音视频, 可以用来在加入房间之前进行视频的预览. 如果不调用此方法, joinRoom方法会自动初始化本地的音视频. 此方法会产生 onAddLocalView onAddLocalAudioTrack 回调

关闭本地音视频

void stopLocalMedia();

该方法结束本地的音视频, 需要在调用leaveRoom之后调用. 此方法会产生onRemoveLocalView onRemoveLocalAudioTrack 回调

加入房间

boolean joinRoom(final String dotToken);

加入一个房间, 房间和用户信息已经包含在token中, dotEngine的服务端会自动匹配. token每次从服务端获取.

为防止token泄露,最好不要重复使用token. 此方法会产生onJoined 回调

离开房间

-(void)leaveRoom;

离开一个房间, 此方法并不会停止本地音视频, 如果要关闭本地视频预览, 在调用leaveRoom后调stopLocalMedia.

此方法会产生onLeave 回调.

设置音视频采集模式

void setCaptureMode(DotEngineCaptureMode captureMode);

此方法为高级api, 设置音视频的采集模式. 使用场景为自定义音视频输入.

DotEngineCaptureMode 有三种模式:

public enum DotEngineCaptureMode {

	DotEngine_Capture_Default,
	DotEngine_Capture_Custom_Video,
	DotEngine_Capture_Custom_Video_Audio
}

DotEngine_Capture_Default: 为默认模式, 使用dotEngine内置的音视频采集api.

DotEngine_Capture_Custom_Video: 为自定义视频模式, 使用场景为用户自行采集视频, 需要对采集的视频进行更多的处理, 比如添加滤镜, 增加美颜,视觉分析,然后再把处理过的视频数据送给dotEngine.

DotEngine_Capture_Custom_Video_Audio: 为自定义音频和视频, 此模式暂时未开放.

更详细的用法请参考自定义输入和输出.

切换前后摄像头

void switchCamera();

切换前后摄像头, 默认是优先选择前置摄像头.

视频切换

void enableVideo(final boolean enable);

在房间里用户有可能需要在音视频的切换,此方法可以动态的开关视频. 调用此方法后, 状态会传播给房间内其他的用户. 此方法会产生onEnableVideo 回调

音频切换

void enableAudio(final boolean enable);

静音模式和非静音模式的切换, 调用此方法后, 状态会传播给房间内其他的用户. 此方法会产生onEnableAudio 回调

开启/关闭扬声器

void enableSpeakerphone(boolean enable);

发送本地视频

public void sendCaptuerImageBuffer(ImageBuffer imageBuffer, int rotation);

当DotEngineCaptureMode 为DotEngine_Capture_Custom_Video, DotEngine_Capture_Custom_Video_Audio时,需要输入外部的视频源.

更多内容可以产看自定义音视频输入.

DotEngineListener

初始化完成, 可以开始预览加入房间

public void onInitPrepared();

有用户加入房间

public void onJoined(String user);

当有用户加入房间时的回调, 包括远程用户和本地用户.

有用户离开房间

public void onLeave(String user);

当有用户离开房间时的回调, 包括远程用户和本地用户.

本地视频视图加入回调

public void onAddLocalView(SurfaceView view);

用户在调用startLocalMedia后, 会回调此方法.

如果view没有被添加到父视图中, 该视图中的视频不会被渲染. 如果用户想自定义本地视频的渲染可以忽略此方法.

远程视频视图加入回调

public void onAddRemoteView(String userId, SurfaceView view);

当远程用户的视频准备好的时候会调用此方法.

如果view没有被添加父视图中,该视图中的视频不会被渲染. 如果用户想自定义远程视频的渲染可以忽略此方法.

本地视频视图移出回调

public void onRemoveLocalView(SurfaceView view);

用户在调用stopLocalMedia后, 会回调此方法. dotEngine 不会做view的移出操作, 需要用户自己完成.

远程视频视图移出回调

public void onRemoveRemoteView(String userId, SurfaceView view);

当远程用户的视频移出的时候会调用此方法.dotEngine 不会做view的移出操作, 需要用户自己完成.

本地音频加入回调

public void onAddLocalAudioTrack();

用户在调用startLocalMedia后, 会回调此方法. 视频模式下可以不用处理.

远程音频加入回调

public void onAddRemoteAudioTrack(String userId);

远程用户音频准备好的时候回调此方法. 视频模式下可以不用处理.

本地音频移出回调

public void onRemoveLocalAudioTrack();

用户在调用stopLocalMedia后, 会调用此方法. 视频模式下可以不用处理.

远程音频移出回调

public void onRemoveRemoteAudioTrack(String userId){};

远程用户的音频移出的时候会调用此方法. 视频模式下可以不用处理.

用户静音/关闭静音回调

public void onEnableAudio(boolean enable, String user)

当房间有用户开启静音或者关闭静音是会产生此回调.

用户关闭视频/打开视频回调

public void onEnableVideo(boolean enable, String user)

当房间内有用户关闭视频或者打开视频会产生此回调.

错误回调

public void onOccurError(DotEngineErrorType errorCode);

当dotEngine发生错误会产生此回调

Audio/Video Frame Listener

为了能更灵活更节省资源的对音视频回调进行控制, Audio/Video Frame Listener 被设计为了DotEngineListener 的子回调.

如果不设置不会占用额外的资源.


public interface  LocalAudioFrameListener {
	void onLocalAudioFrame(DotEngineAudioFrame frame);
}


public interface  RemoteAudioFrameListener {

	void onRemoteAudioFrame(String userId, DotEngineAudioFrame frame);
}


public interface  LocalVideoFrameListener {

	void onLocalVideoFrameListener(DotEngineVideoFrame frame);
}


public interface RemoteVideoFrameListener {

	void onRemoteVideoFrame(String userId, DotEngineVideoFrame frame);
}

具体的用法为:

DotEngineListener dotEngineListener =  new DotEngineListener() {
	// some functions
};

dotEngineListener.localAudioFrameListener = new DotEngineListener.LocalAudioFrameListener() {
            @Override
            public void onLocalAudioFrame(DotEngineAudioFrame frame) {

            }
       };
 //  some other listener

本地AudioFrame 回调

public interface  LocalAudioFrameListener {

	void onLocalAudioFrame(DotEngineAudioFrame frame);
}

如果用户还需要对本地的音频做其他的处理, 可以实现这个回调.

更多的信息可以查看自定义音视频

远程的AudioFrame 回调

public interface  RemoteAudioFrameListener {

	void onRemoteAudioFrame(String userId, DotEngineAudioFrame frame);
}

如果用户需要对远程用户的音频做其他的处理, 可以实现这个回调.

更多的信息可以查看自定义音视频

本地VideoFrame 回调

public interface  LocalVideoFrameListener {

	void onLocalVideoFrameListener(DotEngineVideoFrame frame);
}

如果用户需要对本地的视频做其他的处理, 可以实现这个回调.

更多的信息可以查看自定义音视频

远程VideoFrame 回调

public interface RemoteVideoFrameListener {

	void onRemoteVideoFrame(String userId, DotEngineVideoFrame frame);
}

如果用户需要对远程的视频做其他的处理, 比如自定义渲染,可是实现这个回调.

更多的信息可以查看自定义音视频

Clone this wiki locally