在iOS中录制视频时播放音频文件

2024-01-10

我想在用相机录制时播放音频文件。我使用 AVAudioPlayer 来播放音频,使用 AVCamCaptureManager 来录制。

但是当音频开始播放时,预览屏幕冻结。我应该怎么办?

感谢您的帮助。这是代码。 (我正在研究 AVCam 示例。)

这是预览部分。

if ([self captureManager] == nil) {
        AVCamCaptureManager *manager = [[AVCamCaptureManager alloc] init];
        [self setCaptureManager:manager];

        [[self captureManager] setDelegate:self];

        if ([[self captureManager] setupSession]) {             
            AVCaptureVideoPreviewLayer *newCaptureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:[[self captureManager] session]];
            UIView *view = [self videoPreviewView];
            CALayer *viewLayer = [view layer];
            [viewLayer setMasksToBounds:YES];

            CGRect bounds = CGRectMake(0, 0, 480, 320);
            [newCaptureVideoPreviewLayer setFrame:bounds];

            if ([newCaptureVideoPreviewLayer isOrientationSupported]) {
                [newCaptureVideoPreviewLayer setOrientation:[DeviceProperties setPreviewOrientation]];
            }

            [newCaptureVideoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];

            [viewLayer insertSublayer:newCaptureVideoPreviewLayer below:[[viewLayer sublayers] objectAtIndex:0]];

            [self setCaptureVideoPreviewLayer:newCaptureVideoPreviewLayer];
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                [[[self captureManager] session] startRunning];
            });

            [self updateButtonStates];          
        }

这是音频播放部分。

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@", sound] ofType:@"wav"]];
    AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
    [audioPlayer play];

如果我使用 AudioServicesPlaySystemSound 正常,不会冻结,但这次它只适用于 viewDidLoad。

CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef soundFileRef;
    soundFileRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) CFBridgingRetain(@"sound"), CFSTR ("wav"), NULL);
    UInt32 soundID;
    AudioServicesCreateSystemSoundID(soundFileRef, &soundID);
    AudioServicesPlaySystemSound(soundID);

希望设定AVAudioSession类别至AVAudioSessionCategoryPlayAndRecord将解决问题。并将其类别选项设置为AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionMixWithOthers。请检查下面的一组代码

@property (strong, nonatomic) AVAudioPlayer *audioPlayer;

NSURL *soundUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"VoicemailSound" ofType:@"mp3"]]; //Download and add a system sound to your project and mention its name and type here
self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:nil];

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionMixWithOthers error: nil];

[self.audioPlayer prepareToPlay];
[self.audioPlayer play];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在iOS中录制视频时播放音频文件 的相关文章

随机推荐

  • Awk 新手。与负数格式作斗争

    目标 仅输出大于 1 且小于 1 的数据 or 输出1到 1之间的数据 我有 awk 的基础知识 可以打印第 2 列 我的数据所在的位置 注意我还指定了0 1的范围 awk 0 1 print 2 test dat 我还需要行号 所以我添加
  • 如何在 php 中导入 iCloud 联系人

    如何使用 iCloud API 或使用 PHP 作为服务器端语言的任何其他方法从 iCloud 导入联系人 我知道 iCloud 支持 cardDav 我们可以通过它导入 iCloud 联系人 但是如何导入呢 这对我来说仍然是一个问题 如果
  • 如何在Python中的一行中放置多个导入

    我的问题是关于如何在一行中放置多个导入 from sys import argv from os path import exists 我们能否将上述语句修改为如下所示的单个语句 from sys os path import argv e
  • 跨 WP8 和 Win8 识别用户:ANID2 与 SafeCustomerId

    我们有一个 Web 服务 需要跨设备 wp8 和 win8 识别用户 在电话方面我们有UserExtendedProperties GetValue ANID2 其中获取的是匿名 Microsoft ID 在Windows8上有Online
  • 在 Roxygen2 中导出数据,以便无需 data() 即可使用它们

    阅读完诸如此类的问题后这个关于使用 Roxygen 记录数据集的问题 https stackoverflow com questions 9561684 documenting dataset with roxygen2我已经成功记录了一个
  • 多次使用相同的 C++ 访问说明符

    当下一行就在其正下方或下方几行时 一遍又一遍地声明多个 公共 说明符的目的是什么 我可以理解 当代码修改某些标识符的属性时 即隐藏在宏中的标识符的属性 因此更改宏内的访问属性 因此我们需要 重新定义 从宏中出来 或者当每个访问说明符部分有许
  • C# 中的位图(签名的)比较

    我们有一个有趣的项目 要求我们比较两个签名的两个黑白位图 并判断它们是否是同一个人的签名 由于这只是两个加载的位图 而不是从平板电脑捕获的数据 因此该方法与正常的签名识别略有不同 我认为需要执行以下步骤 将位图裁剪为仅签名 尝试进行某种旋转
  • 我可以用volley做同步请求吗?

    想象一下我正在使用一个已经有后台线程的服务 我可以在同一线程中使用 volley 发出请求 以便回调同步发生吗 原因有两个 首先 我不需要另一个线程 创建它会很浪费 其次 如果我处于 ServiceIntent 中 线程的执行将在回调之前完
  • 如何将公历日期转换为伊斯兰(回历)日期?

    我知道这个问题被问了很多次 但我没有找到正确的方法 我有一个String日期如 01 08 1994 我想把它转换成Hijri日期 使用IslamicCalendar java time DateTimeFormatter dateForm
  • 如何命名我们的 JS 以与 Rails 资产管道一起使用

    我理解 Rails 3 1 资产管道背后的原因 我们将所有 JS 编译在一个整洁的 可缓存的文件中 以提高性能 太好了 我们想要那个 然而 加载所有内容也意味着我们必须非常小心 如果我们附加了一些 JS 则不要在多个页面上使用某个 ID 或
  • Razor - 使用 foreach,每第 n 项插入 html

    我使用 Razor 和 MVC 5 在页面上输出大量项目列表 这是我目前拥有的内容 foreach var item in Model Items a item Name a 我想做的是输出以下内容 div class tab 0 a It
  • 在 Eclipse IDE 中使用 GCC 编译器编译 RTX 内核文件

    我们在KEIL IDE中有一个LPC2148的项目 里面有RTX内核程序以及其他程序 它是由ARM CC编译的 现在我们需要将IDE从KEIL ARM CC 更改为Eclipse GCC 当我们尝试在 Eclipse GCC 编译器中编译它
  • 如何在 JS 类中定义私有方法

    我试图为类定义一个私有方法 以测试不能从类外部调用此类方法 但是 即使我使用规范中指示的语法 我也会遇到错误 我还查了MDN 这是我的班级的代码 class CoffeeMachine waterLimit 200 checkWater v
  • 将州和城市与可能的多个单词相匹配

    我有一个类似以下元素的 Python 列表 Alabama edit Auburn Auburn University 1 Florence University of North Alabama Jacksonville Jacksonv
  • 使用 lambda 表达式从 List 获取 N 个最大数字

    这是我的清单 List
  • 为什么基于 RB 树的 C++ std::set 的插入时间基准得到的是常数而不是对数曲线?

    我在以下位置比较了 BST 和 Heap 堆与二叉搜索树 BST https stackoverflow com questions 6147242 heap vs binary search tree bst 29548834 29548
  • 从反应本机的共享文件夹导入

    我正在创建一个 monorepo 来保存我的 React Web 应用程序和 React Native 应用程序 因为它们共享许多通用代码 我想要得到的设置是 Project web native file js should be abl
  • 是否可以使用phoneGap在模拟器中显示动画gif图像

    我在android中使用phonegap框架工作 我的问题是动画gif图像在模拟器中不起作用 在浏览器中它工作正常 我的问题是动画图像不支持phonegap吗 我刚刚在设备和模拟器上测试了这一点 好消息是 它可以在设备上运行 但不能在模拟器
  • 使用 AutoHotKey 右键单击​​ Windows 10 中的托盘图标

    在 Windows 7 中 我有一个 AutoHotKey 脚本 可以自动右键单击托盘图标 Include A Scriptdir TrayIcon ahk TrayIcon Button CCC exe R 其中使用了 TrayIcon
  • 在iOS中录制视频时播放音频文件

    我想在用相机录制时播放音频文件 我使用 AVAudioPlayer 来播放音频 使用 AVCamCaptureManager 来录制 但是当音频开始播放时 预览屏幕冻结 我应该怎么办 感谢您的帮助 这是代码 我正在研究 AVCam 示例 这