通过API可实现多种类型的内容共享,包括:
各平台实现情况请参考各平台文档详情。 除了基础的内容共享,通过SDK还可以实现电子白板、内容标注等高级功能。 开发者可通过各平台高级功能列表查看详情。 共享内容的状态变更将通过事件回调进行通知。
首先调用dualStreamStart方法开始内容共享,参数为ContentType枚举类型
3.3.3以后版本移除CONTENT_TYPE_SCREEN_WITH_AUDIO类型,共享三方应用音频需要调用startCaptureContentAudio/stopCaptureContentAudio方法来实现。
接下来可以收到onDualStreamStateChange回调,其中包含了双流状态、以及类型参数。如果是等待接收状态我们就可以开始调用 NativeDataSourceManager.putContentData2方法来发送数据流了。 在结束共享时通过dualStreamStop来停止数据流的发送,结束状态还是会通过onDualStreamStateChange回调给我们。 参考流程图:
putContentData2接口所下发帧数据宽高都需要为偶数。
示例代码为共享图片到结束的流程
1.选择图片,开始共享
XyCallActivity.java
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == REQUEST_CODE_CHOOSE && resultCode == RESULT_OK) {
picturePaths = Matisse.obtainPathResult(intent);
if (picturePaths.size() > 0) { //选择共享图片
// start share picture
NemoSDK.getInstance().dualStreamStart(ContentType.CONTENT_TYPE_PICTURE);
}
}
}
2.处理双流回调状态以及发送共享数据流
XyCallActivity.java
NemoSDK.getInstance().setNemoSDKListener(new SimpleNemoSDkListener() {
...
@Override
public void onDualStreamStateChange(NemoDualState state, String reason, int type) {
if (type == DUAL_TYPE_PICTURE) { //共享图片回调
mCallView.updateSharePictures(state);
}
}
...
});
//循环发送图片数据流
private Handler pictureHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == MSG_SHARE_PICTURE) {
String dataSourceId = NemoSDK.getInstance().getDataSourceId();
if (!TextUtils.isEmpty(dataSourceId) && pictureData != null) {
NativeDataSourceManager.putContentData2(dataSourceId,
pictureData, pictureData.length, width, height, 0, 0, 0, true);
}
pictureHandler.sendEmptyMessageDelayed(MSG_SHARE_PICTURE, 200);
}
}
};
3.结束共享
XyCallActivity.java
NemoSDK.getInstance().dualStreamStop(ContentType.CONTENT_TYPE_PICTURE);
//处理共享双流结束回调
if (state == NemoSDKListener.NemoDualState.NEMO_DUAL_STAT_IDLE) {
pictureHandler.removeMessages(MSG_SHARE_PICTURE);
pictureData = null;
...
}