Xamarin Android录制视频-质量差

Xamarin Android录制视频-质量差,xamarin,xamarin.android,Xamarin,Xamarin.android,我正在使用下面的Xamarin教程 我可以成功地录制视频和音频,但质量不是很好。有人能建议/解释我如何提高质量吗 我知道该设备可以录制更高质量的视频,因为本机摄像头应用程序的录制质量要高得多 编辑这里是我到目前为止的代码 protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Set ou

我正在使用下面的Xamarin教程

我可以成功地录制视频和音频,但质量不是很好。有人能建议/解释我如何提高质量吗

我知道该设备可以录制更高质量的视频,因为本机摄像头应用程序的录制质量要高得多

编辑这里是我到目前为止的代码

protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.RecordVideo);
            var record = FindViewById<Button>(Resource.Id.Record);
            var stop = FindViewById<Button>(Resource.Id.Stop);
            var play = FindViewById<Button>(Resource.Id.Play);
            var video = FindViewById<VideoView>(Resource.Id.SampleVideoView);
            var videoPlayback = FindViewById<VideoView>(Resource.Id.PlaybackVideoView);
            string path = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/test.mp4";


            if (Camera.NumberOfCameras < 2)
            {
                Toast.MakeText(this, "Front camera missing", ToastLength.Long).Show();
                return;
            }
            video.Visibility = ViewStates.Visible;
            videoPlayback.Visibility = ViewStates.Gone;

            _camera = Camera.Open(1);
            _camera.SetDisplayOrientation(90);
            _camera.Unlock();

            recorder = new MediaRecorder();

            recorder.SetCamera(_camera);

            recorder.SetAudioSource(AudioSource.Mic);
            recorder.SetVideoSource(VideoSource.Camera);

            recorder.SetOutputFormat(OutputFormat.Default);
            recorder.SetAudioEncoder(AudioEncoder.Default);
            recorder.SetVideoEncoder(VideoEncoder.Default);
            //var cameraProfile = CamcorderProfile.Get(CamcorderQuality.HighSpeed1080p);
           // recorder.SetProfile(cameraProfile);
            recorder.SetOutputFile(path);

            recorder.SetOrientationHint(270);

            recorder.SetPreviewDisplay(video.Holder.Surface);

            record.Click += delegate
            {

                recorder.Prepare();
                recorder.Start();
            };


            stop.Click += delegate
            {
                if (recorder != null)
                {      
                    video.Visibility = ViewStates.Gone;
                    videoPlayback.Visibility = ViewStates.Visible;
                    recorder.Stop();
                    recorder.Release();                    
                }
            };

            play.Click += delegate
            {
                video.Visibility = ViewStates.Gone;
                videoPlayback.Visibility = ViewStates.Visible;
                var uri = Android.Net.Uri.Parse(path);
                videoPlayback.SetVideoURI(uri);
                videoPlayback.Start();
            };

        }
protectedoverride void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
//从“主”布局资源设置视图
SetContentView(Resource.Layout.RecordVideo);
var record=findviewbyd(Resource.Id.record);
var stop=findviewbyd(Resource.Id.stop);
var play=findviewbyd(Resource.Id.play);
var video=findviewbyd(Resource.Id.SampleVideoView);
var videoPlayback=findviewbyd(Resource.Id.PlaybackVideoView);
string path=Android.OS.Environment.ExternalStorageDirectory.AbsolutePath+“/test.mp4”;
如果(摄像机数量小于2)
{
Toast.MakeText(这个“前摄像头丢失”,ToastLength.Long).Show();
返回;
}
video.Visibility=ViewStates.Visible;
videoPlayback.Visibility=ViewStates.Gone;
_摄像机=摄像机。打开(1);
_摄像头。设置显示方向(90);
_摄像头解锁();
记录器=新的MediaRecorder();
记录器。设置摄像机(_摄像机);
recorder.SetAudioSource(AudioSource.Mic);
录像机.设置视频源(视频源.摄像机);
SetOutputFormat(OutputFormat.Default);
recorder.SetAudioEncoder(AudioEncoder.Default);
recorder.SetVideoEncoder(VideoEncoder.Default);
//var cameraProfile=CamcorderProfile.Get(CamcorderQuality.HighSpeed1080p);
//记录器.SetProfile(cameraProfile);
recorder.SetOutputFile(路径);
记录器。设置方向提示(270);
recorder.SetPreviewDisplay(视频.支架.表面);
记录。单击+=委派
{
记录器。准备();
recorder.Start();
};
停止。单击+=委派
{
if(记录器!=null)
{      
video.Visibility=ViewStates.Gone;
videoPlayback.Visibility=ViewStates.Visible;
录音机。停止();
记录器。释放();
}
};
播放。单击+=委派
{
video.Visibility=ViewStates.Gone;
videoPlayback.Visibility=ViewStates.Visible;
var uri=Android.Net.uri.Parse(路径);
videoPlayback.SetVideoURI(uri);
videoPlayback.Start();
};
}

我没有看到示例指定了anywhere,因此您可能希望从该示例开始。默认帧速率、比特率和视频帧大小可能低于预期值。我现在不是计算机管理员,但尝试将配置文件设置为,例如使用MediaRecorder中的SetProfile方法


您需要在设置视频和音频源之后,但在调用SetOutputFile方法之前设置配置文件。

我没有看到指定anywhere的示例,因此您可能希望从该示例开始。默认帧速率、比特率和视频帧大小可能低于预期值。我现在不是计算机管理员,但尝试将配置文件设置为,例如使用MediaRecorder中的SetProfile方法


您需要在设置视频和音频源之后,但在调用SetOutputFile方法之前设置配置文件。

我已经添加了我正在使用的代码,我尝试添加了CamcorderProfile(在上面的代码段中注释掉了),但应用程序中的此配置文件刚刚崩溃。我把这个加在正确的地方了吗?嗯,不知道是怎么回事。我还不能进入计算机,但你能尝试添加
记录器。设置视频编码比特率(3000000)而不是recorder.SetProfile?我认为你的主要问题是比特率很低,所以这应该可以解决它。您也可以手动将帧大小设置为全高清:
recorder.SetVideoSize(19201080)
我已经添加了我正在使用的代码,我已经尝试添加CamcorderProfile(在上面的代码片段中注释掉了),但应用程序中的此功能刚刚崩溃。我把这个加在正确的地方了吗?嗯,不知道是怎么回事。我还不能进入计算机,但你能尝试添加
记录器。设置视频编码比特率(3000000)而不是recorder.SetProfile?我认为你的主要问题是比特率很低,所以这应该可以解决它。您也可以手动将帧大小设置为全高清:
recorder.SetVideoSize(1920,1080)
Hello,您如何解决此问题我无法添加CamcorderProfile Hello,您如何解决此问题我无法添加CamcorderProfile