AVFoundation を使用してビデオを録画し、サーバーに送信しています。録画したビデオをサーバーに送信すると、内部サーバー エラーが返されます。しかし、録画したもの以外のダミー ビデオをアップロードすると、正常にアップロードされます。以下のコードを追加します。
let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
let logsPath = documentsPath.appendingPathComponent(GlobalVar.interVCode)
if !FileManager.default.fileExists(atPath: (logsPath?.absoluteString)!){
do {
try FileManager.default.createDirectory(at: logsPath!, withIntermediateDirectories: true, attributes: nil)
} catch let error as NSError {
NSLog("Unable to create directory \(error.debugDescription)")
}
}
let outputURL: URL = (self.applicationDocumentsDirectory().appendingPathComponent(GlobalVar.interVCode)?.appendingPathComponent("\(questionId)").appendingPathExtension("mp4"))!
self.camera.startRecording(withOutputUrl: outputURL, didRecord:
{(camera, outputURL, error) in
})
カスタム カメラ コントローラー LLSimpleCamera を使用して記録を開始します。以下は、記録を開始するコードです。
- (void)startRecordingWithOutputUrl:(NSURL *)url didRecord:(void (^)(LLSimpleCamera *camera, NSURL *outputFileUrl, NSError *error))completionBlock
{
// check if video is enabled
if(!self.videoEnabled) {
NSError *error = [NSError errorWithDomain:LLSimpleCameraErrorDomain
code:LLSimpleCameraErrorCodeVideoNotEnabled
userInfo:nil];
[self passError:error];
return;
}
if(self.flash == LLCameraFlashOn) {
[self enableTorch:YES];
}
// set video orientation
for(AVCaptureConnection *connection in [self.movieFileOutput connections]) {
for (AVCaptureInputPort *port in [connection inputPorts]) {
// get only the video media types
if ([[port mediaType] isEqual:AVMediaTypeVideo]) {
if ([connection isVideoOrientationSupported]) {
[connection setVideoOrientation:[self orientationForConnection]];
}
}
}
}
self.didRecordCompletionBlock = completionBlock;
[self.movieFileOutput startRecordingToOutputFileURL:url recordingDelegate:self];
}
大変助かりました。