在播放其他视频时录制视频
Record video while other video is playing
我正在使用 UIImagePickerController
录制视频。并且正在使用 AVPlayer
播放视频。并将 AVPlayerLayer
添加到 UIImagePickerController's
cameraOverlayView
以便我可以在录制时看到视频。
我的要求是
- 我需要在使用
UIImagePickerController
录制视频的同时观看视频
- 使用耳机我需要通过播放视频收听音频
- 需要将我的声音录制到录制视频中
- 只有我的声音应该被录制而不是播放视频的音频。
除了 4. 播放视频的音频也与我的声音混合在一起,一切正常。如何处理这种情况?我的最终目标是
- 播放视频的输出是耳机
- 录音输入为耳机麦克风
请帮我完成这件事。
你的要求很有趣。所以你需要同时播放和录制,对吧?
因此,您需要使用类别 AVAudioSessionCategoryPlayAndRecord
.
初始化音频会话
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
因为您正在使用 UIImagePickerController
进行录音,所以您对扬声器和麦克风没有太多控制权。所以测试看看它是否有效。
如果您还有问题,我建议您使用AVCaptureSession
来录制无声视频。看这个例子怎么用record-video-with-avcapturesession-2.
更新:在我的 VOIP 应用程序中,我使用 AVAudioUnit
在播放时进行录音。所以我认为唯一的办法就是分别录制视频和音频,然后使用 AVComposition
将其合成为一部电影。使用 AVCaptureSession
仅录制视频,使用 EZAudio 录制音频。 EZAudio
使用 AVAudioUnit
进行记录,这样它就可以工作了。您可以通过在播放电影时录制音频来测试它,看看它是否有效。希望对你有帮助
更新:我测试过,它只有在你使用耳机或 select 麦克风后方时才有效。
这是测试代码:
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];
});
看看PBJVision library。它允许您在观看预览的同时录制视频,并且在最后,您可以对音频和视频素材做任何您想做的事情。
我正在使用 UIImagePickerController
录制视频。并且正在使用 AVPlayer
播放视频。并将 AVPlayerLayer
添加到 UIImagePickerController's
cameraOverlayView
以便我可以在录制时看到视频。
我的要求是
- 我需要在使用
UIImagePickerController
录制视频的同时观看视频
- 使用耳机我需要通过播放视频收听音频
- 需要将我的声音录制到录制视频中
- 只有我的声音应该被录制而不是播放视频的音频。
除了 4. 播放视频的音频也与我的声音混合在一起,一切正常。如何处理这种情况?我的最终目标是
- 播放视频的输出是耳机
- 录音输入为耳机麦克风
请帮我完成这件事。
你的要求很有趣。所以你需要同时播放和录制,对吧?
因此,您需要使用类别 AVAudioSessionCategoryPlayAndRecord
.
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
因为您正在使用 UIImagePickerController
进行录音,所以您对扬声器和麦克风没有太多控制权。所以测试看看它是否有效。
如果您还有问题,我建议您使用AVCaptureSession
来录制无声视频。看这个例子怎么用record-video-with-avcapturesession-2.
更新:在我的 VOIP 应用程序中,我使用 AVAudioUnit
在播放时进行录音。所以我认为唯一的办法就是分别录制视频和音频,然后使用 AVComposition
将其合成为一部电影。使用 AVCaptureSession
仅录制视频,使用 EZAudio 录制音频。 EZAudio
使用 AVAudioUnit
进行记录,这样它就可以工作了。您可以通过在播放电影时录制音频来测试它,看看它是否有效。希望对你有帮助
更新:我测试过,它只有在你使用耳机或 select 麦克风后方时才有效。 这是测试代码:
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];
});
看看PBJVision library。它允许您在观看预览的同时录制视频,并且在最后,您可以对音频和视频素材做任何您想做的事情。