Puedo grabar video y enviar la película a un archivo correctamente. Sin embargo, tengo un problema con la grabación de video (sin salida de video) cuando intento usar AVAudioPlayer para reproducir algo de audio. ¿Significa que no puedo usar AVCaptureSession y AVAudioPlayer al mismo tiempo? Aquí está mi código para crear la sesión de captura y reproducir el audio. La captura de video se inicia primero, luego, durante la captura, quiero reproducir algo de audio. Muchas gracias por cualquier ayuda.Uso de AVCaptureSession y AVAudioPlayer juntos
Código para crear la sesión de captura para grabar vídeo (con audio) - salida a un archivo .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];
}
Código para reproducir el audio, esta función es llamada durante la sesión de captura de vídeo. Si no llamo a esta función, el video se graba y puedo guardarlo en el archivo .mov. Sin embargo, si llamo a esta función, no hay ningún archivo .mov de salida.
- (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];
}
Hola HappyAppDeveloper, estoy atascado en este mismo problema. Hago lo mismo cuando hago la misma inicialización en setupAudioSession, pero mi sesión de captura siempre se detiene. ¿Sabes si esto se rompió para iOS6? – kungfoo
funcionando perfectamente en iOS 5 y 6. Guardado mi tocino, gracias !!!!!!!!!!! – SpaceDog
Si está utilizando ARC, el reproductor de audio debe declararse "fuerte". De lo contrario, podría ser lanzado temprano y no obtendrá ningún sonido. – Sten