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));
        }
    }