Enregistrement vidéo de l'iphone sdk par programmation

Je suis en train d'implémenter des fonctionnalités comme ci-dessous

Final de la Vidéo Enregistrée = "Capturer une vidéo à partir de l'appareil photo avant + Enregistrement audio de la vidéo (qui je suis à jouer par le biais de lecteur vidéo)".

Pour plus de compréhension veuillez voir le joindre la capture d'écran.

Enregistrement vidéo de l'iphone sdk par programmation

À l'aide de mes blocs de codes qui est donné ci-dessous: À la fin ce que je reçois est Une vidéo mais sans audio.

Mais ce que je veux essayer de mettre en œuvre des "Final de la vidéo enregistrée qui doit être combinaison de: 'Une vidéo qui est capturée à partir de mon appareil photo frontal + Enregistrer uniquement de l'audio du fichier vidéo qui je joue.'"

Comment puis-je atteindre au-dessus de la fonctionnalité?

C'est mon code.

"Enregistrement" Cliquez sur le Bouton de la Méthode est le suivant:

-(void) startRecording
{
    [self initCaptureSession];

    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                         pathForResource:@"video"
                                         ofType:@"mp4"]];
    [self playMovieAtURL:url];

    [self startVideoRecording];
}

"initCaptureSession" : à l'Aide de cette méthode, je suis l'enregistrement d'une vidéo à l'aide de l'appareil photo avant à l'aide de
"AVCaptureSession"

-(void) initCaptureSession
{
NSLog(@"Setting up capture session");
captureSession = [[AVCaptureSession alloc] init];
NSLog(@"Adding video input");
AVCaptureDevice *VideoDevice =  [self frontFacingCameraIfAvailable ];
if (VideoDevice)
{
NSError *error;
videoInputDevice = [AVCaptureDeviceInput deviceInputWithDevice:VideoDevice error:&error];
if (!error)
{
if ([captureSession canAddInput:videoInputDevice])
{
[captureSession addInput:videoInputDevice];
}
else
{
NSLog(@"Couldn't add video input");
}
}
else
{
NSLog(@"Couldn't create video input");
}
}
else
{
NSLog(@"Couldn't create video capture device");
}
NSLog(@"Adding audio input");
AVCaptureDevice *audioCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeMuxed];
NSError *error = nil;
AVCaptureDeviceInput *audioInput = [AVCaptureDeviceInput deviceInputWithDevice:audioCaptureDevice error:&error];
if (audioInput)
{
[captureSession addInput:audioInput];
}
NSLog(@"Adding movie file output");
movieFileOutput = [[AVCaptureMovieFileOutput alloc] init];
movieFileOutput.minFreeDiskSpaceLimit = 1024 * 1024;    //<<SET MIN FREE SPACE IN BYTES FOR RECORDING TO CONTINUE ON A VOLUME
if ([captureSession canAddOutput:movieFileOutput])
[captureSession addOutput:movieFileOutput];
[self CameraSetOutputProperties];           //(We call a method as it also has to be done after changing camera)
NSLog(@"Setting image quality");
[captureSession setSessionPreset:AVCaptureSessionPresetMedium];
if ([captureSession canSetSessionPreset:AVCaptureSessionPreset640x480])     //Check size based configs are supported before setting them
[captureSession setSessionPreset:AVCaptureSessionPreset640x480];
[captureSession startRunning];
}
- (void) CameraSetOutputProperties
{
AVCaptureConnection *CaptureConnection=nil;
NSComparisonResult order = [[UIDevice currentDevice].systemVersion compare: @"5.0.0" options: NSNumericSearch];
if (order == NSOrderedSame || order == NSOrderedDescending) {
//OS version >= 5.0.0
CaptureConnection = [movieFileOutput connectionWithMediaType:AVMediaTypeVideo];
} else {
//OS version < 5.0.0
CaptureConnection = [self connectionWithMediaType:AVMediaTypeVideo fromConnections:[movieFileOutput connections]];
}
//Set landscape (if required)
if ([CaptureConnection isVideoOrientationSupported])
{
AVCaptureVideoOrientation orientation =  AVCaptureVideoOrientationPortrait;//AVCaptureVideoOrientationLandscapeRight;      //<<<<<SET VIDEO ORIENTATION IF LANDSCAPE
[CaptureConnection setVideoOrientation:orientation];
}
}

"-(void) playMovieAtURL: (NSURL*) theURL " En utilisant cette méthode, je suis la lecture d'une vidéo

-(void) playMovieAtURL: (NSURL*) theURL
{
player =
[[MPMoviePlayerController alloc] initWithContentURL: theURL ];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
player.scalingMode = MPMovieScalingModeAspectFill;
player.controlStyle = MPMovieControlStyleNone;
[player prepareToPlay];
[[NSNotificationCenter defaultCenter]
addObserver: self
selector: @selector(myMovieFinishedCallback:)
name: MPMoviePlayerPlaybackDidFinishNotification
object: player];
player.view.frame=CGRectMake(10, 30, 300, 200);
[self.view addSubview:player.view];
[player play];
}

"startVideoRecording" à l'aide de cette méthode que j'ai commencé l'enregistrement de la vidéo Finale.

- (void) startVideoRecording
{
//Create temporary URL to record to
NSString *outputPath = [[NSString alloc] initWithFormat:@"%@%@", NSTemporaryDirectory(), @"output.mov"];
NSURL *outputURL = [[NSURL alloc] initFileURLWithPath:outputPath];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:outputPath])
{
NSError *error;
if ([fileManager removeItemAtPath:outputPath error:&error] == NO)
{
//Error - handle if required
NSLog(@"file remove error");
}
}
//Start recording
[movieFileOutput startRecordingToOutputFileURL:outputURL recordingDelegate:self];
}
- (void)captureOutput:(AVCaptureFileOutput *)captureOutput
didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL
fromConnections:(NSArray *)connections
error:(NSError *)error
{
NSLog(@"didFinishRecordingToOutputFileAtURL - enter");
BOOL RecordedSuccessfully = YES;
if ([error code] != noErr)
{
//A problem occurred: Find out if the recording was successful.
id value = [[error userInfo] objectForKey:AVErrorRecordingSuccessfullyFinishedKey];
if (value)
{
RecordedSuccessfully = [value boolValue];
}
}
if (RecordedSuccessfully)
{
//----- RECORDED SUCCESSFULLY -----
NSLog(@"didFinishRecordingToOutputFileAtURL - success");
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
if ([library videoAtPathIsCompatibleWithSavedPhotosAlbum:outputFileURL])
{
[library writeVideoAtPathToSavedPhotosAlbum:outputFileURL
completionBlock:^(NSURL *assetURL, NSError *error)
{
if (error)
{
NSLog(@"File save error");
}
else
{
recordedVideoURL=assetURL;
}
}];
}
else
{
NSString *assetURL=[self copyFileToDocuments:outputFileURL];
if(assetURL!=nil)
{
recordedVideoURL=[NSURL URLWithString:assetURL];
}
}
}
}
Consultez Ce Lien si il aide les raywenderlich.com/13418/how-to-play-record-edit-videos-in-ios
+1 pour la réponse belle mise en forme 🙂
Salut..c'est que peut enregistrer en direct des rtsp streaming aussi ?

OriginalL'auteur Wolverine | 2013-06-14