嗨,我正在尝试设置Agora Android广播sdk。在接收端它使我陷入黑屏。我添加了应用ID和临时令牌。
现在,我正在Application
类的onCreate()
方法中初始化sdk:
RtcEngine.create(context, context.getString(R.string.private_app_id), VideoEngineEventHandler(context).iRtcEngineEventHandler)
VideoEngineEventHandler
class VideoEngineEventHandler(private val context: Context) {
private var TAG: String = VideoEngineEventHandler::class.java.simpleName
val iRtcEngineEventHandler = object : IRtcEngineEventHandler() {
override fun onConnectionLost() {
super.onConnectionLost()
Log.d(TAG, "On Connection Lost")
}
override fun onUserJoined(uid: Int, elapsed: Int) {
super.onUserJoined(uid, elapsed)
Log.d(TAG, "On User Joined: $uid")
}
override fun onUserOffline(uid: Int, reason: Int) {
super.onUserOffline(uid, reason)
Log.d(TAG, "On User Offline")
}
override fun onUserEnableVideo(uid: Int, enabled: Boolean) {
super.onUserEnableVideo(uid, enabled)
Log.d(TAG, "onUserEnableVideo: $uid : enable: $enabled")
}
}
广播活动
class BroadcastActivity : BaseActivity() {
private var mRtcEngine: RtcEngine? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_broadcast)
launchBroadcast(intent.getBooleanExtra("IS_BROADCAST", false))
}
private fun launchBroadcast(isBroadcast: Boolean) {
mRtcEngine = AwaazRepository.rtcEngine()
if (isBroadcast) {
mRtcEngine?.let {
it.setChannelProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING)
it.setClientRole(Constants.CLIENT_ROLE_BROADCASTER)
it.enableVideo()
setOrientation(it)
setupLocalVideo(it)
it.joinChannel(getString(R.string.agora_access_token), "TESTING", null, 0)
}
} else {
mRtcEngine?.let {
it.setChannelProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING)
it.setClientRole(Constants.CLIENT_ROLE_AUDIENCE)
it.enableVideo()
setOrientation(it)
setupRemoteVideo(0, it)
it.joinChannel(getString(R.string.agora_access_token), "TESTING", null, 0)
}
}
}
private fun setOrientation(rtcEngine: RtcEngine) {
val orientationMode = VideoEncoderConfiguration.ORIENTATION_MODE.ORIENTATION_MODE_FIXED_PORTRAIT
val dimensions = VideoEncoderConfiguration.VideoDimensions(360, 640)
val videoEncoderConfiguration = VideoEncoderConfiguration(dimensions, VideoEncoderConfiguration.FRAME_RATE.FRAME_RATE_FPS_24, VideoEncoderConfiguration.STANDARD_BITRATE, orientationMode)
rtcEngine.setVideoEncoderConfiguration(videoEncoderConfiguration)
}
private fun setupLocalVideo(rtcEngine: RtcEngine) {
val surfaceView = RtcEngine.CreateRendererView(baseContext)
surfaceView.setZOrderMediaOverlay(true)
container.addView(surfaceView)
rtcEngine.setupLocalVideo(VideoCanvas(surfaceView, VideoCanvas.RENDER_MODE_ADAPTIVE, 0))
}
private fun setupRemoteVideo(uid: Int, rtcEngine: RtcEngine) {
if (container.childCount >= 1) {
return
}
val surfaceView = RtcEngine.CreateRendererView(baseContext)
container.addView(surfaceView)
rtcEngine.setupRemoteVideo(VideoCanvas(surfaceView, VideoCanvas.RENDER_MODE_ADAPTIVE, uid))
surfaceView.tag = uid
}
override fun onPause() {
super.onPause()
mRtcEngine?.leaveChannel()
}
}