Unity插件(二) ------ NatCorder(录屏保存到相册)

其实之前在CSDN中分享过此插件,但当时并没有研究完
Unity插件学习(八) ------ NatCorder录屏功能

此文补上录制特定摄像机代码 :
公共函数 :

 private void StartMicrophone()
    {
#if !UNITY_WEBGL || UNITY_EDITOR // No `Microphone` API on WebGL :(
        // Create a microphone clip
        microphoneSource.clip = Microphone.Start(null, true, 60, 48000);
        while (Microphone.GetPosition(null) <= 0) ;
        // Play through audio source
        microphoneSource.timeSamples = Microphone.GetPosition(null);
        microphoneSource.loop = true;
        microphoneSource.Play();
#endif
    }
    private void StopMicrophone()
    {
#if !UNITY_WEBGL || UNITY_EDITOR
        Microphone.End(null);
        microphoneSource.Stop();
#endif
    }

开始录制调用 :

  cameraInput = new CameraInput(videoRecorder, recordingClock, captureCamera);
                //录像
                StartMicrophone();
                audioInput = new AudioInput(videoRecorder, recordingClock, microphoneSource, true);
                isStartRecording = true;
                Invoke("StopRecord", 10);

如果想要录制多个摄像头的画面,可以在创建cameraInput中传入多个摄像头, CameraInput原型如下 :

     [Doc(@"CameraInputCtor")]
        public CameraInput (IMediaRecorder mediaRecorder, IClock clock, params Camera[] cameras) {
            this.mediaRecorder = mediaRecorder;
            this.cameras = cameras;
            this.clock = clock;
            DispatchUtility.onFrame += OnFrame;
        }

停止录制 :

 public void StopRecord()
    {
        Debug.Log("停止录制:" + VideoFill.fillAmount);
        if (isStartRecording)
        {
            StopMicrophone();
            audioInput.Dispose();
            cameraInput.Dispose();
            // Stop recording
            videoRecorder.Dispose();
        }
    }

录制结束回调:

 private void OnReplay(string path)
    {
        Debug.Log("Saved recording to: " + path);
        // 预览视频
        //#if UNITY_EDITOR
        //        EditorUtility.OpenWithDefaultApp(path);
        //#elif UNITY_IOS
        //            Handheld.PlayFullScreenMovie("file://" + path);
        //#elif UNITY_ANDROID
        //            Handheld.PlayFullScreenMovie(path);
        //#endif

        string destination = "";
        string filename = path.Split('/')[path.Split('/').Length - 1];
        filename.Replace('_', 'a');
        if (Application.platform == RuntimePlatform.Android)
        {
            destination = "/mnt/sdcard/DCIM/Screenshots";
            if (!Directory.Exists(destination))
            {
                Directory.CreateDirectory(destination);
            }
            destination = destination + "/" + filename;
            Debug.Log(destination);
            FileTool.CopyFile(path, destination);

            // 安卓在这里需要去 调用原生的接口去 刷新一下,不然相册显示不出来
            using (AndroidJavaClass playerActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
            {
                using (AndroidJavaObject jo = playerActivity.GetStatic<AndroidJavaObject>("currentActivity"))
                {
                    Debug.Log("scanFile:m_androidJavaObject ");
                    jo.Call("scanFile", destination);
                }
            }
            MainControll.Instance.OpenTip(TipType.OneBtn, TipContentType.defaultTip, null, null, "视频录制成功!", PanelLayer.Top);
        }
        else if (Application.platform == RuntimePlatform.IPhonePlayer)
        {
#if UNITY_IOS
            IOSAlbumCamera.iosSaveVideoToPhotosAlbum(path);
#endif
        }
    }

这里我修改了一下,注释掉了预览录制视频的代码,并根据平台保存到相册,不然的话相册中是找不到录制的视频的.

17787668-4eca4da34eb71a37.png
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千喜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值