You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin iOS AVCaptureSession问题:iPhone 8仅录音频/无视频

解决iPhone 8上Xamarin Forms视频录制仅捕获音频的问题

我之前在做Xamarin Forms iOS视频录制功能时,也碰到过类似iPhone 8上只出音频没视频的情况,结合你给出的代码片段,大概率是以下几个关键环节没处理到位,给你逐一排查的方向:

1. 先确认摄像头权限与设备可用性

  • 首先检查Info.plist是否添加了必要的权限描述:
    • NSCameraUsageDescription:说明应用需要摄像头权限的原因
    • NSMicrophoneUsageDescription:说明应用需要麦克风权限的原因
      没有这些的话,系统会直接拒绝权限请求,导致摄像头无法启动。
  • 代码里要先检查摄像头设备是否有效,并且权限状态是否为授权:
    var status = AVCaptureDevice.GetAuthorizationStatus(AVMediaType.Video);
    if (status != AVAuthorizationStatus.Authorized)
    {
        // 请求权限
        await AVCaptureDevice.RequestAccessForMediaTypeAsync(AVMediaType.Video);
    }
    // 再次确认设备是否存在
    var device = videoDevices.FirstOrDefault(d => d.Position == cameraPosition);
    if (device == null)
    {
        Console.WriteLine("无法找到指定位置的摄像头设备");
        return;
    }
    

2. 检查CaptureSession的预设兼容性

AVCaptureSession.PresetMedium可能在iPhone 8上存在兼容性问题,建议先判断设备是否支持该预设:

if (!CaptureSession.CanSetSessionPreset(AVCaptureSession.PresetMedium))
{
    // 换用设备支持的预设,比如PresetHigh或者Preset1280x720
    CaptureSession.SessionPreset = AVCaptureSession.PresetHigh;
}

3. 确保视频输入与输出已正确添加到会话

从你的代码片段看,你创建了视频输入,但可能没完成以下两步:

  • 将视频输入添加到CaptureSession:
    var input = AVCaptureDeviceInput.FromDevice(device, out error);
    if (error != null)
    {
        Console.WriteLine($"创建视频输入失败: {error.LocalizedDescription}");
        return;
    }
    if (CaptureSession.CanAddInput(input))
    {
        CaptureSession.AddInput(input);
    }
    
  • 添加视频输出组件(比如AVCaptureMovieFileOutput):
    var videoOutput = new AVCaptureMovieFileOutput();
    if (CaptureSession.CanAddOutput(videoOutput))
    {
        CaptureSession.AddOutput(videoOutput);
    }
    

4. 会话启动要在主线程执行

AVCaptureSession的启动/停止操作必须在主线程进行,否则可能出现设备无法正确初始化的情况:

Device.BeginInvokeOnMainThread(() =>
{
    if (!CaptureSession.Running)
    {
        CaptureSession.StartRunning();
    }
});

5. 检查设备配置的锁定操作

如果你的代码里有修改摄像头的配置(比如对焦、曝光),必须先锁定设备配置,操作完成后再解锁:

NSError configError;
if (device.LockForConfiguration(out configError))
{
    // 这里做设备配置修改,比如设置曝光模式等
    device.UnlockForConfiguration();
}
else
{
    Console.WriteLine($"锁定设备配置失败: {configError.LocalizedDescription}");
}

先从权限和输入输出的添加这两个最常见的问题入手排查,应该能解决iPhone 8上的视频录制问题。

内容的提问来源于stack exchange,提问作者Yashvit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:37:33