API说明【JAVA屏幕共享SDK】
API接口
屏幕录制SDK以SDInterfaceScreenPublishService这个Service服务形式对外提供屏幕录制、麦克风采集服务。
外层需负责:服务到AndroidManifest的注册、相关权限的申请、MediaProjection对VirtualDisplay的获取、省电白名单的加入,这部分可以参考DEMO源码实现。
Android屏幕采集较为繁琐,本SDK极大简化了用户的调用工作。
1、准备启动service所需的Intent
mIntentForService.putExtra("SERVER_IP", serverIp);
mIntentForService.putExtra("ROOM_ID", roomId);
mIntentForService.putExtra("UP_POSITION", upPosition);
mIntentForService.putExtra("ENABLE_AUDIO", ENABLE_AUDIO_CAP);
mIntentForService.putExtra("ENCODE_VIDEO_WIDTH", width);
mIntentForService.putExtra("ENCODE_VIDEO_HEIGHT", height);
mIntentForService.putExtra("ENCODE_VIDEO_FRAMERATE",framerate);
mIntentForService.putExtra("ENCODE_VIDEO_BITRATE", bitrate);
mIntentForService.putExtra("ENCODE_VIDEO_USEHW", useHardwareEnc);
mIntentForService.putExtra("ENCODE_AUDIO_SAMPLERATE", sampleRate);
mIntentForService.putExtra("ENCODE_AUDIO_CHANNELS", channelCount);
参数:
@ SERVER_IP,指定服务器IP地址
@ROOM_ID,指定发布的房间号(非0值,与播放端约定)。
@UP_POSITION,指定发布到房间中的哪一个“位置”。
@ENABLE_AUDIO,是否发布音频流
@ENCODE_VIDEO_WIDTH,发布视频流的宽度,比如1920
@ENCODE_VIDEO_HEIGHT,发布视频流的高度,比如1080
@ENCODE_VIDEO_FRAMERATE,发布视频流的帧率,当设置的帧率超过30fps时,内部将使用高帧率模式,码率波动加剧。
@ENCODE_VIDEO_BITRATE,发布视频流的码率,注意其单位为bps
@ENCODE_VIDEO_USEHW,是否使用视频硬编码,因为屏幕共享分辨率往往较高,建议使用硬编码以保证性能。
@ENCODE_AUDIO_SAMPLERATE,发布音频流的采样率,比如44100
@ENCODE_AUDIO_CHANNELS,发布音频流的声道数,比如2即双声道立体声。
2、准备绑定service所需的ServiceConnection
我们通过bind服务,实现对服务API的直接调用。目前服务对外提供2个API,分别为:
(1)void setScreenCapStatusCallback(ScreenCapStatusCallback callback)
设置屏幕录制服务的状态回调,状态回调包括三种状态:OnStart、OnRecording、OnStop,其中前两者可用于外层的界面展示更新,比如展示已共享的时长。OnStop则用于通知外层需结束服务,此时一般发生了内部错误。
(2)void setScreenCapSource(VirtualDisplay virtualDisplay)
设置屏幕录制源VirtualDisplay,该录制源由外层通过MediaProjection系统API获得。
3、绑定并启动服务
调用Android系统API绑定并启动服务,注意二者顺序不能错误,即先绑定后启动。
bindService(mIntentForService, mServiceConnection, Context.BIND_AUTO_CREATE);
startService(mIntentForService);
4、结束并解除绑定服务
调用Android系统API结束服务并解除绑定。
stopService(mIntentForService);
unbindService(mServiceConnection);
结束服务有两种情况下触发,第一种是用户UI操作结束分享;第二种是分享失败,服务内部申请结束,此时将通过回调OnStop接口触发。
最后修改时间: 1 年前
API接口
1、准备启动service所需的Intent
2、准备绑定service所需的ServiceConnection
3、绑定并启动服务
4、结束并解除绑定服务