void StartTranscoding(bool ifRemoteUser = false) { if (isStreaming && !ifRemoteUser) { return; } if (isStreaming && ifRemoteUser) { mRtcEngine.RemovePublishStreamUrl(RTMP_URL); } var lt = new LiveTranscoding(); lt.videoBitrate = 400; lt.videoCodecProfile = VIDEO_CODEC_PROFILE_TYPE.VIDEO_CODEC_PROFILE_HIGH; lt.videoGop = 30; lt.videoFramerate = 24; lt.lowLatency = false; lt.audioSampleRate = AUDIO_SAMPLE_RATE_TYPE.AUDIO_SAMPLE_RATE_44100; lt.audioBitrate = 48; lt.audioChannels = 1; lt.audioCodecProfile = AUDIO_CODEC_PROFILE_TYPE.AUDIO_CODEC_PROFILE_LC_AAC; lt.liveStreamAdvancedFeatures = new LiveStreamAdvancedFeature[0]; var localUesr = new TranscodingUser() { uid = 0, x = 0, y = 0, width = 360, height = 640, audioChannel = 0, alpha = 1.0, }; if (ifRemoteUser) { var remoteUser = new TranscodingUser() { uid = remoteUid, x = 360, y = 0, width = 360, height = 640, audioChannel = 0, alpha = 1.0, }; lt.userCount = 2; lt.width = 720; lt.height = 640; lt.transcodingUsers = new[] { localUesr, remoteUser }; } else { lt.userCount = 1; lt.width = 360; lt.height = 640; lt.transcodingUsers = new[] { localUesr }; } mRtcEngine.SetLiveTranscoding(lt); var rc = mRtcEngine.AddPublishStreamUrl(RTMP_URL, true); if (rc == 0) { logger.UpdateLog(string.Format("Error in AddPublishStreamUrl: {0}", RTMP_URL)); } }