我正在使用UIImagePickerController
录制视频。并使用AVPlayer
播放视频。并将AVPlayerLayer
添加到UIImagePickerController's
cameraOverlayView
,以便我可以在录制时看到视频。
我的要求是
UIImagePickerController
每件事都有效4.但播放视频的音频也与我的声音混合在一起。如何处理这种情况?我的最终目标是
请帮我完成这件事。
答案 0 :(得分:3)
您的要求很有趣。所以你需要同时播放和录制,对吧?
因此,您需要使用类别AVAudioSessionCategoryPlayAndRecord
初始化音频会话。
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
因为您正在使用UIImagePickerController
进行录制,所以您无法控制扬声器和麦克风。所以测试看它是否有效。
如果您仍有问题,建议您使用AVCaptureSession
录制没有音频的视频。看看这个例子如何使用它record-video-with-avcapturesession-2。
更新:在我的VOIP应用程序中,我在播放时使用AVAudioUnit
进行录制。所以我认为唯一的方法是分别录制视频和音频,然后使用AVComposition
将其组合成一部电影。使用AVCaptureSession
仅录制视频并使用EZAudio录制音频。 EZAudio
使用AVAudioUnit
进行记录,以便它可以正常工作。您可以在播放电影时通过录制音频对其进行测试,看看它是否有效。我希望它会有所帮助
更新:我测试过,只有使用耳机或选择麦克风后才能使用。 这是经过测试的代码:
NSString *moviePath = [[NSBundle mainBundle] pathForResource:@"videoviewdemo" ofType:@"mp4"];
NSURL *url = [NSURL fileURLWithPath:moviePath];
// You may find a test stream at <http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8>.
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];
AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];
AVPlayerLayer *layer = [[AVPlayerLayer alloc] init];
[layer setPlayer:player];
[layer setFrame:CGRectMake(0, 0, 100, 100)];
[self.view.layer addSublayer:layer];
[player play];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//
// Setup the AVAudioSession. EZMicrophone will not work properly on iOS
// if you don't do this!
//
AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *error;
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
if (error)
{
NSLog(@"Error setting up audio session category: %@", error.localizedDescription);
}
[session setActive:YES error:&error];
if (error)
{
NSLog(@"Error setting up audio session active: %@", error.localizedDescription);
}
//
// Customizing the audio plot's look
//
// Background color
self.audioPlot.backgroundColor = [UIColor colorWithRed:0.984 green:0.471 blue:0.525 alpha:1.0];
// Waveform color
self.audioPlot.color = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
// Plot type
self.audioPlot.plotType = EZPlotTypeBuffer;
//
// Create the microphone
//
self.microphone = [EZMicrophone microphoneWithDelegate:self];
//
// Set up the microphone input UIPickerView items to select
// between different microphone inputs. Here what we're doing behind the hood
// is enumerating the available inputs provided by the AVAudioSession.
//
self.inputs = [EZAudioDevice inputDevices];
self.microphoneInputPickerView.dataSource = self;
self.microphoneInputPickerView.delegate = self;
//
// Start the microphone
//
[self.microphone startFetchingAudio];
self.microphoneTextLabel.text = @"Microphone On";
[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
});
答案 1 :(得分:0)
看看PBJVision library。它允许您在观看预览时录制视频,最后,您可以使用音频和视频镜头执行任何操作。