gpt4 book ai didi

ios - 在播放其他视频时录制视频

转载 作者:搜寻专家 更新时间:2023-10-31 19:30:53 26 4
gpt4 key购买 nike

我正在使用 UIImagePickerController 来录制视频。并使用 AVPlayer 播放视频。并将 AVPlayerLayer 添加到 UIImagePickerController 的 cameraOverlayView 以便我可以在录制时看到视频。我的要求是

  1. 我需要在使用 UIImagePickerController 录制视频的同时观看视频
  2. 使用耳机我需要通过播放视频收听音频
  3. 需要将我的声音录制到视频中
  4. 只应录制我的声音,而不应录制视频的音频。

除了 4. 播放视频的音频也与我的声音混合,其他一切正常。如何处理这种情况?我的最终目标是

  1. 播放视频的输出是耳机
  2. 录音输入是耳机麦克风

请帮我完成这件事。

最佳答案

您的要求很有趣。所以你需要同时播放和录制,对吧?因此,您需要使用类别 AVAudioSessionCategoryPlayAndRecord 初始化 Audio Session 。

[[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];
});

关于ios - 在播放其他视频时录制视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31472699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com