在将相机从二维码移开之前不会播放音频 - iOS

Posted

技术标签:

【中文标题】在将相机从二维码移开之前不会播放音频 - iOS【英文标题】:Audio not playing until moving the camera away from Qr code - iOS 【发布时间】:2019-08-09 07:17:23 【问题描述】:

我是ios development 的新手,我正在开发一个应用程序,我想在检测到QR code 时播放一些音频。我能够检测到QR code 并播放音频,但问题是当我将相机从QR code 移开时仅播放音频。所以,如果我将相机指向QR code,它不会播放音频,但只要我移动相机(即没有检测到QR code),音频就会开始播放。我不希望这种行为在检测到QR code 后立即播放音频。任何建议都会很棒,因为我刚刚开始 iOS development 2 3 天前。谢谢。

-(void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection(AVCaptureConnection *)connection



NSString *detected=@"";



if (metadataObjects != nil && [metadataObjects count] > 0) 



    AVMetadataMachineReadableCodeObject *metadataObj = [metadataObjects objectAtIndex:0];



    if ([[metadataObj type] isEqualToString:AVMetadataObjectTypeQRCode]) 


        detected=[NSString stringWithString:[metadataObj stringValue]];

        NSString *path =  [[NSBundle mainBundle] pathForResource:@"cbp"  ofType:@"mp3"];

        NSURL *url = [NSURL URLWithString:path];



        _audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:NULL];


        [_audioPlayer play];


    




【问题讨论】:

您使用哪个库来检测二维码?最好能在问题正文中添加代码。 我只是在使用 AVFoundation.framework。当然我添加代码 @RaviSharma 我已经添加了代码 【参考方案1】:

不要在这个AVFoundation委托方法中初始化AVAudioPlayer,在开始扫描之前用声音文件加载播放器。

(void)loadSound
    NSString *beepFilePath = [[NSBundle mainBundle] pathForResource:@"cbp" ofType:@"mp3"];
    NSURL *beepURL = [NSURL URLWithString:beepFilePath];
    NSError *error;

    _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:beepURL error:&error];
    if (error) 
        NSLog(@"Could not play sound file.");
        NSLog(@"%@", [error localizedDescription]);
    
    else
        [_audioPlayer prepareToPlay];
    

您可以在viewWillAppear() 方法中调用loadSound() 函数。您的AVFoundation 委托方法将如下所示:-

(void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection(AVCaptureConnection *)connection
NSString *detected=@"";

if (metadataObjects != nil && [metadataObjects count] > 0) 

    AVMetadataMachineReadableCodeObject *metadataObj = [metadataObjects objectAtIndex:0];

    if ([[metadataObj type] isEqualToString:AVMetadataObjectTypeQRCode]) 
        detected=[NSString stringWithString:[metadataObj stringValue]];    

        if (_audioPlayer) 
            [_audioPlayer play];
        
    


试试这个。

【讨论】:

以上是关于在将相机从二维码移开之前不会播放音频 - iOS的主要内容,如果未能解决你的问题,请参考以下文章

iOS音频问题通用配置

iOS 15 音频播放列表问题

Android 音频播放——AudioTrack直接播PCMMediaPlayer播媒体文件可以是audio

当通过 JavaScript 填充源时,Html5 音频不会在 Safari 中播放

从 socket.io 收到消息时从客户端播放音频 - node.js

从视频制作音频播客的服务? [关闭]