API说明【JAVA屏幕共享SDK】
API接口
屏幕录制SDK以SDInterfaceScreenPublishService这个Service服务形式对外提供屏幕录制、麦克风采集服务。
外层需负责:服务到AndroidManifest的注册、相关权限的申请、MediaProjection对VirtualDisplay的获取、省电白名单的加入,这部分可以参考DEMO源码实现。
Android屏幕采集较为繁琐,本SDK极大简化了用户的调用工作。
1、准备启动service所需的Intent
mIntentForService.putExtra("REMOTE_IP", remoteIp);
mIntentForService.putExtra("REMOTE_PORT", remotePort);
mIntentForService.putExtra("REMOTE_SCREEN_CODE", remoteScreenCode);
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);
mIntentForService.putExtra("ENCODE_AUDIO_SOURCE_RENDER", true);
参数:
@ REMOTE_IP,指定远端IP地址,IP+PORT或者投屏码 两种方式选择一种。
@ REMOTE_PORT,指定远端端口号。
@ REMOTE_SCREEN_CODE,指定投屏码,IP+PORT或者投屏码 两种方式选择一种。
@ 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即双声道立体声。
@ ENCODE_AUDIO_SOURCE_RENDER,设置为true时采集扬声器(要求Android 10以上),否则采集麦克风作为发布的音频流。
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 年前