Tôi cố gắng để thực hiện chức năng như dưới đâyquay video trong iphone sdk programatically
cuối cùng ghi video = "Capture video từ camera phía trước + Ghi âm thanh từ video (mà tôi đang chơi thông qua trình phát video) ".
Để hiểu rõ hơn, vui lòng xem ảnh chụp màn hình đính kèm.
Sử dụng khối của tôi về mã được đưa ra dưới đây: Vào cuối những gì tôi nhận được là Một đoạn video nhưng không có âm thanh.
Nhưng những gì tôi muốn cố gắng để thực hiện là "cuối cùng ghi lại đoạn video mà phải kết hợp của: 'Một đoạn video được chụp từ camera phía trước của tôi + Ghi chỉ có âm thanh từ file video mà tôi đang chơi. '"
Bất kỳ ai cũng có thể giúp hoặc hướng dẫn tôi cách tôi có thể đạt được chức năng trên. Bất kỳ trợ giúp sẽ được đánh giá cao.
Đây là mã của tôi.
"Recording" nhấp chuột lên nút Phương pháp là như sau:
-(void) startRecording
{
[self initCaptureSession];
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:@"video"
ofType:@"mp4"]];
[self playMovieAtURL:url];
[self startVideoRecording];
}
"initCaptureSession": Sử dụng phương pháp này tôi đang quay video bằng camera phía trước sử dụng "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" Bằng cách sử dụng phương pháp này tôi đang chơi g video
-(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" sử dụng phương pháp này tôi đã bắt đầu ghi video cuối cùng.
- (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 requried
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 SUCESSFULLY -----
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];
}
}
}
}
Kiểm tra liên kết này nếu nó giúp http://www.raywenderlich.com/13418/how-to-play-record-edit-videos-in-ios –
+1 cho định dạng trả lời tốt đẹp :) –
Hi..is that có thể ghi trực tiếp rtsp streaming cũng? – Anny