nativescript-transcoder
nativescript-transcoder 插件,用于转码视频(iOS 使用 AVFoundation,Android 使用 android-transcoder)
npm i --save nativescript-transcoder
- 版本:0.1.0-alpha.1
- GitHub:
- NPM: https://npmjs.net.cn/package/nativescript-transcoder
- 下载
- 昨日:0
- 上周:0
- 上个月:0
nativescript-transcoder
警告:此项目正在开发中,v1.0 预计 3 月底完成
此插件为 NativeScript 带来了视频转码支持。
- 通过 android-transcoder 在 Android 上进行硬件转码。
- @todo 通过 AVFoundation 在 iOS 上进行硬件转码
- @todo 通过 FFMpeg 在 iOS/Android 上进行软件转码
该插件支持观察事件以及承诺。
目前 Android 仅支持 AAC 音频,模拟器相机使用 3GPP 音频,因此您无法使用模拟器进行测试
对于硬件模式,Android 仅支持 720p 分辨率,其他分辨率可能在某些设备上无法正常工作,可能会开发一种选择最佳配置文件的方法(关于此插件的未来开发说明:CamcorderProfile 是获取所有可能的编码分辨率的方法,然后我们只需根据设置选择最佳的一个即可)。
安装
tns plugin add nativescript-transcoder
用法
JavaScript
const {
Transcoder,
TranscoderVideoCodec,
TranscoderEventList,
} = require('nativescript-transcoder');
const transcoder = new Transcoder(inputFilePath, {
videoBitrate: 1000 * 1000, // 1mbps
resolutionConstraint: 720,
videoCodec: TranscoderVideoCodec.H264,
});
transcoder.transcode().then(({ filePath }) => {
console.log(`Output file path: ${filePath}`);
}).catch((err) => {
console.log(`Error: ${err.type} - ${err.message}`);
});
transcoder.on(TranscoderEventList.Progress, (progress) => {
console.log(`Progress: ${progress}`);
})
TypeScript
import {
Transcoder,
TranscoderVideoCodec,
} from 'nativescript-transcoder';
const transcoder = new Transcoder(inputFilePath, {
videoBitrate: 1000 * 1000, // 1mbps
resolutionConstraint: 720,
videoCodec: TranscoderVideoCodec.H264,
});
transcoder.transcode().then(({ filePath }) => {
console.log(`Output file path: ${filePath}`);
}).catch((err: TranscoderException) => {
console.log(`Error: ${err.type} - ${err.message}`);
});
transcoder.on(TranscoderEventList.Progress, (progress: number) => {
console.log(`Progress: ${progress}`);
})
API
转码器
您需要使用的主要类,一个转码器只能用于一次转码。
构造函数
方法
方法 | 返回类型 | 描述 |
---|---|---|
constructor(filePath: string, options?: TranscoderOptions) |
转码器 |
初始化转码器,filePath 为必填项(输入视频)。 |
transcode() |
Promise<TranscoderResult> |
启动转码 |
cancel() |
void |
强制取消执行任务的线程 |
属性
属性 | 默认值 | 描述 |
---|---|---|
@ObservableProperty progress: number |
null |
转码进度,如果不适用于则返回 null |
@ObservableProperty status |
TranscoderStatus.Idle |
转码过程的状态 |
@readonly filePath: string |
N/A | 将要转码的文件路径。 |
@get/@set audioBitrate: number |
从选项中获取 | 设置/获取音频比特率 |
@get/@set videoBitrate: number |
从选项中获取 | 设置/获取视频比特率 |
事件
名称 | 回调 | 描述 |
---|---|---|
TranscoderEventList.Completed 或 completed |
(result: TranscoderResult) => void |
当转码完成时触发。您可以从 result.filePath 访问输出路径。 |
TranscoderEventList.Canceled 或 canceled |
() => void |
用户已取消转码 |
TranscoderEventList.Progress 或 progress |
(progress: number) => void |
每次进度变化时都会调用。 |
TranscoderEventList.Failed 或 failed |
(err: TranscoderException) => void |
在转码或尝试转码时发生错误。请参阅 TranscoderException 了解如何处理异常。 |
TranscoderOptions
构造一个对象,作为 options
传递给 new Transcoder(filePath, options)
。
所有选项都是可选的。
属性 | 默认值 | 描述 |
---|---|---|
videoBitrate: number |
null |
调整视频比特率 默认为 null 。当 null 时,尝试使用与输入相同的比特率,但在 Android 上,h264 的比特率信息并不能总是被检索到,因此如果需要进行编码,比特率将默认为 1mbps(1000000)。 |
audioBitrate: number |
null |
调整音频比特率(以 bps 计),默认为 null(保持比特率) |
videoCodec: TranscoderVideoCodec |
TranscoderVideoCodec.Auto |
定义要使用的视频编解码器。请注意,并非所有设备都支持所有编解码器,如果不清楚,请使用 TranscoderVideoCodec.Auto 。 |
audioCodec: TranscoderAudioCodec |
TranscoderVideoCodec.Aac |
定义要使用的音频编解码器。目前仅支持 AAC。 |
nativeTranscoder: TranscoderNativeTranscoder |
TranscoderNativeTranscoder.Hardware |
定义要使用的本地编解码器。硬件编解码器更快且效果更好,但 FFMPEG 不依赖于设备的功能。硬件编解码器可以始终处理由设备相机捕获的视频。首选选择是硬件编解码器,但如果视频来自未知来源,请选择 FFMPEG。 |
resolutionConstraint: number |
null |
定义视频的输出分辨率。正数表示对视频较小一方的约束。负数表示对视频较大一方的约束。重要:视频将不会被缩放!(null 以保持原始格式)。例如:- 输入:1920x1080,resolutionConstraint:720,输出:1280x720 - 输入:1920x1080,resolutionConstraint:-720,输出:720x405 |
strictResolutionConstraint: boolean |
false |
如果此值为 true,且视频无法根据定义的 resolutionConstraint 进行缩放时,编解码器将抛出错误。否则,它将使用最接近的可能分辨率。(例如:480p 无法用 3140x2160 实现,如果 true 则会抛出异常,如果 false 则输出分辨率为 848x477)。 |
TranscoderException
示例
transcoder.on(TranscoderEventList.Failed, (err: TranscoderException) => {
switch (err.type) {
case TranscoderExceptionType.InvalidOutputFormat:
console.log('The device doesn\'t support the asked output')
break;
default: // TranscoderExceptionType.Failed:
console.log('Unable to trasncode')
break;
}
})
属性
属性/方法 | 默认值 | 描述 |
---|---|---|
type: TranscoderExceptionType |
null |
编解码错误类型(见 TranscoderExceptionType) |
nativeError: any |
undefined |
可能是本地编解码器拒绝的原始错误。 |
constructor(type: TranscoderExceptionType, message: string, nativeError?: any): TranscoderException |
N/A | 初始化 TranscoderException,推荐的方式是从该类继承。 |
TranscoderExceptionType
一个枚举,包含所有可能的类型
推荐的方式是使用 TranscoderExceptionType.Canceled
而不是它的值('CANCELED'
)。
键 | 值 | 描述 |
---|---|---|
Canceled |
'CANCELED' |
用户取消异常 |
Failed |
'FAILED' |
通用错误 |
InvalidInputFormat |
'INVALID_INPUT' |
当输入无法进行编解码时的通用错误。 |
InvalidOutputResolution |
'INVALID_INPUT' |
当输出分辨率不正确(如浮点数)时发生。 |
InvalidOutputVideoCodec |
'INVALID_OUTPUT_VIDEO_CODEC' |
当设备上没有相应的视频编解码器时发生。 |
InvalidOutputFormat |
'INVALID_OUTPUT_FORMAT' |
当设备最终无法进行硬件编解码给定格式时发生。 |
许可
Apache 许可协议版本 2.0,2004 年 1 月