【发布时间】:2018-09-13 17:24:52
【问题描述】:
我们有一个使用 Xamarin Forms 构建的视频录制应用程序。对于 iOS 录制,我们有一个自定义渲染器,它执行以下操作:
NSError error;
var CaptureSession = new AVCaptureSession();
CaptureSession.SessionPreset = AVCaptureSession.PresetMedium;
var videoDevices = AVCaptureDevice.DevicesWithMediaType(AVMediaType.Video);
var cameraPosition = AVCaptureDevicePosition.Front;
var device = videoDevices.FirstOrDefault(d => d.Position == cameraPosition);
var input = new AVCaptureDeviceInput(device, out error);
CaptureSession.AddInput(input);
var audioDevice = AVCaptureDevice.GetDefaultDevice(AVMediaType.Audio);
var audioDeviceInput = AVCaptureDeviceInput.FromDevice(audioDevice, out error);
CaptureSession.AddInput(audioDeviceInput);
CaptureSession.StartRunning();
// ...
// ...
var MovieFileOutput = new AVCaptureMovieFileOutput();
CaptureSession.AddOutput(MovieFileOutput);
var basePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
var outputFilePath = Path.Combine(basePath, Path.ChangeExtension("video", "mov"));
MovieFileOutput.StartRecordingToOutputFile(NSUrl.FromFilename(outputFilePath), this);
// ...
// ...
MovieFileOutput.StopRecording();
我们过去甚至只是将 .mov 文件重命名为 .mp4,它在所有浏览器上都能正常播放 - mac/pc 上的 chrome 和 safari。我知道这不是一个好主意,但它似乎奏效了。
这在 iPhone 8 之前一直可以正常工作。现在在 iPhone 8 上录制的任何视频在 Safari 中都可以正常工作,但在 Mac 或 pc 的 chrome 上它只是播放音频但没有视频。
我知道苹果在最近的 iOS 版本中提供了一些新的视频/照片格式,但这应该会影响 iPhone 7 Plus(运行最新的 iOS 并在相机中启用“高效”设置)。
有什么好的方法可以将录制的视频直接编码为 mp4 视频,以免出现此类问题?
以上代码基于示例应用程序 - https://developer.xamarin.com/samples/monotouch/ios10/AVCam/
【问题讨论】:
-
我搜索了但没有发现与您相同的问题,请向Bugzilla提交错误。
-
@Yashvit 我也面临类似的问题。你找到解决办法了吗?
-
@Yashvit 我看到了同样的问题。什么最终对你有用?
-
我最终使用 AVExportSession 进行转换。我将粘贴一些代码作为答案,以便你们了解如何去做
标签: ios xamarin xamarin.ios avcapturesession