在 Nativescript 应用程序中将 PHAsset/AVAsset 转换为 mp4 视频
Convert PHAsset/AVAsset to mp4 video in Nativescript app
我使用文件选择器的 nativescript-imagepicker
插件。
这个returns一个PHAsset
。
我必须将它复制到一个临时目录才能上传。
我是 iOS 的新人,所以我尝试了一下:
const options = PHVideoRequestOptions.new();
options.version = PHVideoRequestOptionsVersion.Current;
PHImageManager
.defaultManager()
.requestAVAssetForVideoOptionsResultHandler(
phAsset
, options
, (avAsset, audioMix, info) => {
try {
const tempFilePath = path.join(tempFolderPath, `${Date.now()}.mp4`);
const targetURL = NSURL.fileURLWithPath(tempFilePath);
const exportSession = AVAssetExportSession.alloc(avAsset, AVAssetExportPresetPassthrough);
exportSession.outputUrl = targetURL;
exportSession.outputFileType = AVFileTypeMPEG4;
exportSession.exportAsynchronouslyWithCompletionHandler(() => {
console.log(exportSession.status);
});
}
catch (e) {
console.log(e);
}
}
);
我的代码毫无错误地崩溃了,所以我不知道从哪里开始调试。
我想要一个MP4,也可以在网络上播放。
最后我需要一个 mp4 文件的字符串(路径)来上传带有 nativescript-background-http
的 id。
你的语法好像有误
const exportSession = AVAssetExportSession.alloc().initWithAssetPresetName(avAsset, AVAssetExportPresetPassthrough);
exportSession.outputURL = targetURL;
我使用文件选择器的 nativescript-imagepicker
插件。
这个returns一个PHAsset
。
我必须将它复制到一个临时目录才能上传。
我是 iOS 的新人,所以我尝试了一下:
const options = PHVideoRequestOptions.new();
options.version = PHVideoRequestOptionsVersion.Current;
PHImageManager
.defaultManager()
.requestAVAssetForVideoOptionsResultHandler(
phAsset
, options
, (avAsset, audioMix, info) => {
try {
const tempFilePath = path.join(tempFolderPath, `${Date.now()}.mp4`);
const targetURL = NSURL.fileURLWithPath(tempFilePath);
const exportSession = AVAssetExportSession.alloc(avAsset, AVAssetExportPresetPassthrough);
exportSession.outputUrl = targetURL;
exportSession.outputFileType = AVFileTypeMPEG4;
exportSession.exportAsynchronouslyWithCompletionHandler(() => {
console.log(exportSession.status);
});
}
catch (e) {
console.log(e);
}
}
);
我的代码毫无错误地崩溃了,所以我不知道从哪里开始调试。 我想要一个MP4,也可以在网络上播放。
最后我需要一个 mp4 文件的字符串(路径)来上传带有 nativescript-background-http
的 id。
你的语法好像有误
const exportSession = AVAssetExportSession.alloc().initWithAssetPresetName(avAsset, AVAssetExportPresetPassthrough);
exportSession.outputURL = targetURL;