我正在创建一个应用程序,其中需要录制视频并将其上传到服务器。现在我的项目也有一个android版本。为了支持android版本,我必须以mp4格式录制视频。我按照本教程将UIImagePicker媒体类型设置为电影格式imagePicker.mediaTypes = [kUTTypeMovie as String]
这UIImagePickerController
是最适合我的要求,我唯一需要更改的是将其保存为mp4格式。我试过了kUTTypeMPEG4
,mediaTypes
但是在运行时抛出错误,没有错误描述。
这是我的视频捕获功能
func startCameraFromViewController() {
if UIImagePickerController.isSourceTypeAvailable(.Camera) == false {
return
}
viewBlack.hidden = false
presentViewController(cameraController, animated: false, completion: nil)
cameraController.sourceType = .Camera
cameraController.mediaTypes = [kUTTypeMovie as String]
//cameraController.mediaTypes = [kUTTypeMPEG4 as String]
cameraController.cameraCaptureMode = .Video
cameraController.videoQuality = .TypeMedium
if(getPurchaseId() as! Int == 0)
{
if(txtBenchMark.text?.isEmpty == false)
{
cameraController.videoMaximumDuration = NSTimeInterval(300.0)
}else{
cameraController.videoMaximumDuration = NSTimeInterval(60.0)
}
}else{
cameraController.videoMaximumDuration = NSTimeInterval(600.0)
}
cameraController.allowsEditing = false
}
我正在使用Swift 2.2和Xcode 8 Use Legacy swift Language version = Yes
任何替代解决方案也表示赞赏。提前致谢。
编辑:我发现没有任何方法可以直接以mp4格式直接录制视频。只能从Apple的quicktime mov格式转换为所需的格式。
您可以使用以下代码将录制的视频转换为MP4:
func encodeVideo(videoURL: NSURL) {
let avAsset = AVURLAsset(URL: videoURL, options: nil)
var startDate = NSDate()
//Create Export session
exportSession = AVAssetExportSession(asset: avAsset, presetName: AVAssetExportPresetPassthrough)
// exportSession = AVAssetExportSession(asset: composition, presetName: mp4Quality)
//Creating temp path to save the converted video
let documentsDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
let myDocumentPath = NSURL(fileURLWithPath: documentsDirectory).URLByAppendingPathComponent("temp.mp4").absoluteString
let url = NSURL(fileURLWithPath: myDocumentPath)
let documentsDirectory2 = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL
let filePath = documentsDirectory2.URLByAppendingPathComponent("rendered-Video.mp4")
deleteFile(filePath)
//Check if the file already exists then remove the previous file
if NSFileManager.defaultManager().fileExistsAtPath(myDocumentPath) {
do {
try NSFileManager.defaultManager().removeItemAtPath(myDocumentPath)
}
catch let error {
print(error)
}
}
url
exportSession!.outputURL = filePath
exportSession!.outputFileType = AVFileTypeMPEG4
exportSession!.shouldOptimizeForNetworkUse = true
var start = CMTimeMakeWithSeconds(0.0, 0)
var range = CMTimeRangeMake(start, avAsset.duration)
exportSession.timeRange = range
exportSession!.exportAsynchronouslyWithCompletionHandler({() -> Void in
switch self.exportSession!.status {
case .Failed:
print("%@",self.exportSession?.error)
case .Cancelled:
print("Export canceled")
case .Completed:
//Video conversion finished
var endDate = NSDate()
var time = endDate.timeIntervalSinceDate(startDate)
print(time)
print("Successful!")
print(self.exportSession.outputURL)
default:
break
}
})
}
func deleteFile(filePath:NSURL) {
guard NSFileManager.defaultManager().fileExistsAtPath(filePath.path!) else {
return
}
do {
try NSFileManager.defaultManager().removeItemAtPath(filePath.path!)
}catch{
fatalError("Unable to delete file: \(error) : \(__FUNCTION__).")
}
}
问题内容: 我正在努力理解它是如何工作的,但是对我来说却很难。=)我有1个视图,有一个按钮和一个小的ImageView区域可供预览。该按钮触发imagepickercontroller,UIView将显示拾取的图像。没有错误,但是图像未显示在UIImageView区域中。 问题答案: 您正在抓取具名,并且不存在此类图像。你注定要抓住用钥匙从词典:
在我的Android应用程序中,我想通过改变mp4视频的分辨率、比特率来压缩mp4视频。我不想使用FFmpeg(因为我不想使用NDK),所以我决定使用MediaCodec API。 以下是我的逻辑步骤: null 我的问题是:我不知道如何设置解码器的输出和编码器的输入之间的连接。我可以将视频解码到一个表面,或者从一个表面编码一个新的视频。但我不明白怎么把它们联系起来。 我阅读了以下链接:Andro
问题内容: 好的,基本上我有一个项目,要求对用户隐藏视频,同时仍然能够查看它们(使用php)。这是我到目前为止所得到的: video.php文件具有以下内容: 并且应该显示此内容的html文件使用的是预期的html5。现在这是东西..当我直接嵌入这个(不是)时,它起作用了。但是它在我的iPhone上不起作用,并且在标签中也不起作用…如果我使用直接文件而不是php包装器,那么一切也可以在我的iPho
问题内容: 我正在尝试以编程方式创建UIImage视图,我有一个新视图,并且尝试这样做 这行不通,因为我不知道 您 在第二行中应该看到的是什么。 问题: 如何通过编码而不是在情节提要中使UIImageView出现在屏幕上 问题答案: 首先,您从图片文件中创建一个,然后从中创建一个: 最后,您需要给出一个框架并将其添加到视图中以使其可见:
我知道这个问题已经被问了很多次,有很多问题、答案和讨论。但我不知道该做什么,不该做什么。 我已经参考了下面的链接,以获得解决方案,但运气不好。 https://stack overflow . com/questions/23438767/how-to-record-video-on-kit kat-4-4 < br > https://stack overflow . com/questions
我是为了视频压缩而引用这个链接。https://github.com/lalongoo/videocompressor当我压缩。mkv文件时,它的工作和提供更小的大小,但当我压缩。mp4文件时,它提供的大小比视频的原始大小更大。我不明白我必须做什么改变来实现这一点。..这段代码使用MediaCodec进行视频压缩。..是否可以快速压缩?