Jestem w stanie nagrać wideo i poprawnie wypisać film do pliku. Mam jednak problem z nagrywaniem wideo (brak opcji wideo) podczas próby użycia AVAudioPlayer do odtwarzania dźwięku. Czy to oznacza, że nie mogę jednocześnie korzystać z AVCaptureSession i AVAudioPlayer? Oto mój kod do tworzenia sesji przechwytywania i do odtwarzania dźwięku. Przechwytywanie wideo jest uruchamiane jako pierwsze, a następnie podczas przechwytywania chcę odtwarzać dźwięk. Dziękuję bardzo za każdą pomoc.Używanie AVCaptureSession i AVAudioPlayer razem
Kod stworzyć sesję przechwytywania do nagrywania wideo (z dźwiękiem) - wyjście do pliku .mov:
- (void)addVideoInput
AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
//... also some code for setting up videoDevice/frontCamera
NSError *error;
AVCaptureDeviceInput *videoIn = [AVCaptureDeviceInput
deviceInputWithDevice:frontCamera error:&error];
AVCaptureDeviceInput *audioIn = [AVCaptureDeviceInput
deviceInputWithDevice:audioDevice error:&error];
if (!error) {
if ([captureSession canAddInput:audioIn])
[captureSession addInput:audioIn];
else
NSLog(@"Couldn't add audio input.");
if ([captureSession canAddInput:videoIn])
[captureSession addInput:videoIn];
else
NSLog(@"Couldn't add video input.");
}
- (void)addVideoOutput
{
AVCaptureMovieFileOutput *m_captureFileOutput = [[AVCaptureMovieFileOutput alloc] init];
[captureSession addOutput:m_captureFileOutput];
[captureSession startRunning];
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSMutableString *filePath = [NSMutableString stringWithString:@"Movie.mov"];
NSString* fileRoot = [docDir stringByAppendingPathComponent:filePath];
NSURL *fileURL = [NSURL fileURLWithPath:fileRoot];
AVCaptureConnection *videoConnection = NULL;
for (AVCaptureConnection *connection in [m_captureFileOutput connections])
{
for (AVCaptureInputPort *port in [connection inputPorts])
{
if ([[port mediaType] isEqual:AVMediaTypeVideo])
{
videoConnection = connection;
}
}
}
[videoConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeRight];
[m_captureFileOutput startRecordingToOutputFileURL:fileURL recordingDelegate:self];
[m_captureFileOutput release];
}
kod do odtwarzania audio, funkcja ta jest rozmowa w trakcie sesji przechwytywania wideo. Jeśli nie zadzwonię do tej funkcji, wideo zostanie nagrane i będę mógł zapisać plik .mov. Jeśli jednak zadzwonię do tej funkcji, nie ma wyjściowego pliku .mov.
- (void)playAudio
{
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"AudioFile" ofType:@"mp3"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundFilePath];
AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];
[fileURL release];
self.audioPlayer = newPlayer;
[newPlayer release];
[audioPlayer setDelegate:self];
[audioPlayer prepareToPlay];
[audioPlayer play];
}
Witaj HappyAppDeveloper, utknąłem na tym samym problemie. Robię to samo, co w tej samej inicjalizacji w setupAudioSession, ale sesja przechwytywania zawsze się zatrzymuje. Czy wiesz, czy to się nie udało na iOS6? – kungfoo
działa idealnie na iOS 5 i 6! Uratowałem mój bekon, dzięki !!!!!!!!!!! – SpaceDog
Jeśli używasz ARC, odtwarzacz audio musi być uznany za "silny". W przeciwnym razie może zostać zwolniony wcześniej i nie będzie żadnego dźwięku. – Sten