# 特殊资源的转码

特殊资源 处理
gif 需要转一个整片的mp4,再转一个分片的MP4,整片的mp4用于合成,分片的mp4用于前端预览 2次转码
序列图(tga, png, jpg) 需要转一个整片的mp4,再转一个分片的MP4,整片的mp4用于合成,分片的mp4用于前端预览 2次转码
带alpha通道的视频 * 正常分片 转码 预览*
如果带alpha*
1. 单片alpha 转码 合成 (合成端其实不会用)*
2. 分片alpha 转码 预览
3次转码
带alpha的序列图 * 转单片视频 转码 合成*
如果带alpha*
1. 单片alpha 不转码*
2. 分片alpha 不转码*
* 转分片视频 转码 预览*
如果带alpha*
1. 单片alpha 转码 合成*
2. 分片alpha 转码 预览
4次转码

# gif、tga转码和序列图转码都需要转码两次

转码需要两次的原因是,gif本身不是一个视频,所以合成的时候没办法用来合成,需要把gif转成一个视频才能用来合成,第二次转整片的目的就是为了之后的合成。第一次转码和普通视频的转码流程没有区别。

第一次调用创建转码任务【/job/create】接口,请求体的resourceType为1, isSingleSlice为false.第一次转码结束,在收到【/job/transcode/complete】的请求处理中,将转码的产物m3u8文件等信息保存到对应的数据库视频表的记录中。 请求体:

{
    "uuid": "uuid",         // 任务UUID
    "type": 0,              // 任务类型,0--转码,1--合成
    "data": {
      "url": "...",           // 如果是转码任务,是视音频的url;如果是合成任务,是工程文件的url 
      "callbackHost": "...",  // 回调的Host
      "resourceType":1        // 任务资源类型
      "isDir":false           // 是否是目录
      "isSingleSlice": false  // 是否分片
      "isAlpha": false        // 是否转alpha视频
      "resourceNames":[]      //目录资源的资源文件名列表
    }   
}

第二次调用创建转码任务【/job/create】接口,请求体的resourceType为1, isSingleSlice为true.第二次转码结束,在收到【/job/transcode/complete】的请求处理中,将转码的产物singleSliceUrl文件等信息保存到对应的数据库视频表的记录中。

请求体:

{
    "uuid": "uuid",         // 任务UUID
    "type": 0,      				// 任务类型,0--转码,1--合成
    "data": {
      "url": "...",           // 如果是转码任务,是视音频的url;如果是合成任务,是工程文件的url  
      "callbackHost": "...",	// 回调的Host
      "resourceType":1  			// 任务资源类型
      "isDir":false						// 是否是目录
      "isSingleSlice": true	  // 是否分片
      "isAlpha": false				// 是否转alpha视频
      "resourceNames":[]			//目录资源的资源文件名列表
    }   
}

# 带alpha通道的视频转码

需要转3次的原因是第一次正常转码后会返回该视频是否带alpha的标志,如果视频带alpha, 那么需要转一个整片的alpha视频用于合成,另外需要转一个分片的视频用于前端预览。 第一次调用创建转码任务【/job/create】接口,请求体的resourceType为1, isAlpha为false.第一次转码结束,在收到【/job/transcode/complete】的请求处理中,在返回的请求体里needTranscodeAlphaChannel字段为true,根据这个字段来决定是否需要转带alpha通道视频。

响应体

{
        "duration": 50000,
        "metadataFilePath": "/opt/bsedit/<uuid>.m3u8",
        "outputFileType": 0,
        "needTranscodeAlphaChannel": true,
        "videoWidth": 1280,
        "videoHeight": 720
}

第二次调用创建转码任务【/job/create】接口,请求体的resourceType为1, isSingleSlice为true, isAlpha为true.第二次转码结束,在收到【/job/transcode/complete】的请求处理中,将转码的产物singleSliceUrl文件等信息保存到对应的数据库视频表的记录alpha_url字段中。转码器的命令行需要带--generate-alpha-channel参数表示转alpha视频。

请求体

{
    "uuid": "uuid",         // 任务UUID
    "type": 0,              // 任务类型,0--转码,1--合成
    "data": {
      "url": "...",           // 如果是转码任务,是视音频的url;如果是合成任务,是工程文件的url  
      "callbackHost": "...",  // 回调的Host
      "resourceType":1        // 任务资源类型
      "isDir":false           // 是否是目录
      "isSingleSlice": true   // 是否分片
      "isAlpha": true         // 是否转alpha视频
      "resourceNames":[]      //目录资源的资源文件名列表
    }   
}

第三次调用创建转码任务【/job/create】接口,请求体的resourceType为1, isSingleSlice为false, isAlpha为true.第二次转码结束,在收到【/job/transcode/complete】的请求处理中,将转码的产物m3u8Url文件等信息保存到对应的数据库视频表的记录alpha_m3u8_url字段中。转码器的命令行需要带--generate-alpha-channel参数表示转alpha视频。

请求体

{
    "uuid": "uuid",         // 任务UUID
    "type": 0,              // 任务类型,0--转码,1--合成
    "data": {
      "url": "...",           // 如果是转码任务,是视音频的url;如果是合成任务,是工程文件的url  
      "callbackHost": "...",  // 回调的Host
      "resourceType":1        // 任务资源类型
      "isDir":false           // 是否是目录
      "isSingleSlice": false  // 是否分片
      "isAlpha": true       // 是否转alpha视频
      "resourceNames":[]      //目录资源的资源文件名列表
    }   
}

# 带alpha的序列图

带alpha通道的序列图是序列图和alpha视频转码的组合