public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            Opentok.Base.otc_init();

            publisher  = new OTGLVideoRender(new RectangleF(0, 0, 320, 240));
            subscriber = new OTGLVideoRender(new RectangleF(0, 240, 320, 240));

            sessCb = new Session.otc_session_cb();
            sessCb.on_connected       = on_connected_cb;
            sessCb.on_stream_received = on_stream_received_cb;
            sessCb.userData           = (IntPtr)GCHandle.Alloc(this);

            sess = Opentok.Session.otc_session_new(API_KEY, SESSION_ID, ref sessCb);
            Opentok.Session.otc_session_connect(sess, TOKEN);

            publisher.BackgroundColor  = UIColor.Red;
            subscriber.BackgroundColor = UIColor.Yellow;

            View.AddSubview(publisher);
            View.AddSubview(subscriber);

            toggleButton = new UIButton(new RectangleF(0, 480, 320, 100));
            toggleButton.SetTitle("Toggle Camera", UIControlState.Normal);
            toggleButton.TouchUpInside +=
                (object sender, EventArgs e) =>
                Opentok.iOS.VideoCapturer.video_capturer_toggle_camera_position(capturer);

            View.AddSubview(toggleButton);
        }
        public void DoRenderFrame(OTGLVideoRender view, IntPtr frame)
        {
            var format = Opentok.VideoFrame.otc_video_frame_get_format(frame);
            var copy   = Opentok.VideoFrame.otc_video_frame_copy(format, frame);

            view.RenderVideoFrame(copy);
            Opentok.VideoFrame.otc_video_frame_destroy(copy);
        }