在IOS objective-C中通过设备摄像头捕获的视频中不播放音频的avplayer

时间:2016-05-17 09:47:40

标签: ios objective-c audio avfoundation avplayer

我正在从设备摄像头捕获视频,而不是将该视频存储到设备本地存储器中,而不是在下一个屏幕中我使用 AVPlayer 播放该视频,但我没有从视频中获取声音这是视频播放的代码

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
    [[AVAudioSession sharedInstance] setActive:YES error:nil];

    _avPlayer=[[AVPlayer alloc]initWithURL:url]; //URL of my recorded video
    _avPlayerLayer =[AVPlayerLayer playerLayerWithPlayer:_avPlayer];
    [_avPlayerLayer setFrame:CGRectMake(0, 0, self.videoview.frame.size.width, self.videoview.frame.size.height)];
    [_avPlayerLayer setBackgroundColor:[[UIColor blackColor]CGColor]];
    _avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    [self.pictureview.layer addSublayer:_avPlayerLayer];
    [_avPlayer seekToTime:kCMTimeZero];
    _avPlayer = [self rotateVideoPlayer:_avPlayer withDegrees:0.0];
    _avPlayer.volume = 1.0;
    [_avPlayer play];

注意: - 视频有声音,因为在预览后,我正在服务器上传视频,因为我可以听到录制视频中的声音。

我正在使用 AVCaptureSession 来录制视频,并将添加 AVMediaTypeVideo AVMediaTypeAudio 作为AVCaptureDevice。 因此在播放时会出现任何问题。播放之前我将从AVCaptureSession中删除AVCaptureDevice设备,而不是播放捕获的视频。

2 个答案:

答案 0 :(得分:0)

我前一段时间遇到同样的问题,将此代码添加到AppDelegate方法帮助了我:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
        NSError *err;
        AVAudioSession *session = [AVAudioSession sharedInstance];
        bool success = [session setCategory:AVAudioSessionCategoryPlayback
                                      error:&err];
        if (!success) {
            DLog(@"error changing audio mode %@", err);
            [session setCategory:AVAudioSessionCategoryPlayback
                           error:&err];
            if (err) {
                DLog(@"error changing audio mode %@", err);
            }
        }
}

如果它没有帮助,请尝试关闭"静音"您设备上的按钮。 如果确实存在,请检查错误描述。

<强>更新 你是否初始化了这样的音频输入?

        AVCaptureDevice *audioDevice = [[AVCaptureDevice devicesWithMediaType:AVMediaTypeAudio] firstObject];
        AVCaptureDeviceInput *audioDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:&error];

        if (error)
        {
            NSLog(@"%@", error);
        }

        if ([session canAddInput:audioDeviceInput])
        {
            [session addInput:audioDeviceInput];
        }

答案 1 :(得分:0)

您可以使用MPMoviePlayerController轻松播放视频。在我的一个项目中,我正在玩,

self.videoController = [[MPMoviePlayerController alloc] init];

[self.videoController setContentURL:videourl];
[self.videoController.view setFrame:CGRectMake (0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self.view addSubview:self.videoController.view];

UIButton *closeButton = [[UIButton alloc]initWithFrame:CGRectMake(self.view.frame.size.width-60, 20, 60, 30)];

[closeButton addTarget:self action:@selector(cancel:) forControlEvents:UIControlEventTouchUpInside];

[closeButton setTitle:@"Cancel" forState:UIControlStateNormal];

[self.videoController.view addSubview:closeButton];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(videoPlayBackDidFinish:)
                                             name:MPMoviePlayerPlaybackDidFinishNotification
                                           object:self.videoController];

[self.videoController play];

我正在添加关闭按钮和观察者,如果不需要,则不需要这样做。

不要忘记导入<MediaPlayer/MediaPlayer.h>

更新:

 audioSession = [AVAudioSession sharedInstance];


    NSError *err;
    NSError *error;


    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error: &err];

    if (err) {
        NSLog(@"ERROR occured %@",[err localizedDescription]);
    }

    [audioSession setActive:YES error: &error];

    [audioSession setActive:NO error:nil];
    // [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
    [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker
                                    error:nil];

    [audioSession setActive:YES error:nil];



    audioPlayer = nil;
    //NSError *error;


    audioPlayer = [[AVAudioPlayer alloc]
                   initWithContentsOfURL:self.audioRecorder1.url
                   error:&error];
    // audioPlayer.volume = 1.0;
    audioPlayer.delegate = self;
    [audioPlayer prepareToPlay];
      [audioPlayer play];

您使用avplayer而不是音频播放器!主要关注的是会议!

希望这会有所帮助:)