刘亦菲 ai换脸
多码率自安妥即指将指定的音视频文献流长入打包生成一个自安妥码流文献伊人电影网,该自安妥码流文献包含不同音视频文献流的码率、辨别率等信息,播放器则凭据汇聚带宽环境自动给与最符合现时带宽环境的码流播放。
简介视频点播干事当今维持视频打包模板和字幕打包模板,用于生成可切换不同辨别率和不同志话字幕的多码率自安妥文献。维持通过扫尾台和API的神气创建多码率自安妥模板。
疑望事项视频打包模板不维持使用标准加密,如若要使用标准加密,请使用平时转码模板。
字幕文献必须和视频源文献存储在归拢个区域,归拢个OSS Bucket中。
字幕打包模板不可单创举建使用,必须与视频打包模板一同使用。
字幕打包模板中,字幕文献仅只维持VTT法式。通过API神气确立时需疑望,字幕参数消散时,Language参数仅用于检索需要替换的字幕文献,而Language本人不会被替换,不存在的字幕道话不可替换。
转码干事均为收费项,具体请参见收费标准。
扫尾台神气确立创建多码率自安妥的转码模板组。
登录视频点播扫尾台,在点播扫尾台左侧的导航栏给与确立惩处 > 媒体处理确立 > 转码模板组。
在转码模板组页签,单击添加转码模板组,插足添加转码模板页面。
确立模板组称呼。
在视频打包模板下方,单击添加模板,确立视频打包模板参数。
其中基本参数的封装法式固定为hls,视频打包参数实在立讲解如下:
打包类型:固定为HLS打包。
带宽阈值:提供给播放器凭据现时汇聚带宽环境判断需要给与播放的码流,单元:bps。提出使用推选确立。
基本参数、视频参数、音频参数、高等参数、条目转码参数实在立与平时转码模板实在立近似,请参见平时转码模板确立。
凭据实质需求,通过添加模板,来创建多个不同码率、辨别率、了了度的视频打包模板。
在字幕打包模板下方,单击添加模板,单击字幕打包列表下的添加,确立字幕打包模板。
凭据实质需求,通过添加,来添增加个不同志话类型的字幕,每种类型仅维持一个字幕。

视频打包模板及字幕打包模板创建完成后,单击保存。
发起多码率转码。
在视频点播扫尾台,给与媒资库 > 音/视频。
在音/视频页面,单击筹算视频的媒体处理。
处理类型给与用转码模板组处理,转码模板组给与第一步所创建的转码模板组,单击详情,发起媒体处理。

恶果展示。
多码率打包后码流展示:(2路转码流,1路自安妥流)
撸啊撸在点播扫尾台,给与媒资库 > 音/视频,单击筹算视频(上一步历程媒体处理的视频)的惩处,给与视频地址页签。

播放恶果展示:(使用上图中自安妥的地址播放)
在Aliplayer播放器的基础确立页伊人电影网,输入播放地址(使用上图中视频地址页中自安妥的地址),在播放预览页查看播放恶果。

创建用于多码率自安妥的转码模板组。
/** * 以下为调用示例 */ public static void main(String[] args) throws ClientException { // 阿里云账号AccessKey领有总共API的探问权限,提出您使用RAM用户进行API探问或日常运维。 // 激烈提出不要把AccessKey ID和AccessKey Secret保存到工程代码里,不然可能导致AccessKey裸露,禁锢您账号下总共资源的安全。 // 本示例通过从环境变量中读取AccessKey,来已毕API探问的身份考证。运转代码示例前,请确立环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。 DefaultAcsClient client = initVodClient(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); AddTranscodeTemplateGroupResponse response = new AddTranscodeTemplateGroupResponse(); try { response = addTranscodeTemplateGroup(client); System.out.println("TranscodeTemplateGroupId = " + response.getTranscodeTemplateGroupId()); } catch (Exception e) { System.out.println("ErrorMessage = " + e.getLocalizedMessage()); } System.out.println("RequestId = " + response.getRequestId()); } /** * 添加转码模板组确立 */ public static AddTranscodeTemplateGroupResponse addTranscodeTemplateGroup(DefaultAcsClient client) throws Exception { AddTranscodeTemplateGroupRequest request = new AddTranscodeTemplateGroupRequest(); request.setName("grouptest2"); JSONArray transcodeTemplateList = new JSONArray(); //平时转码模板确立 transcodeTemplateList.add(buildNormalTranscodeConfig()); //多码率打包转码模板确立 transcodeTemplateList.add(buildVideoPackageConfig()); //字幕打包确立 transcodeTemplateList.add(buildSubtitlePackageConfig()); request.setTranscodeTemplateList(transcodeTemplateList.toJSONString()); System.out.println("request = " + JSONObject.toJSONString(request)); return client.getAcsResponse(request); } /** * 构建需要添加的转码模板确立数据 * * @return */ public static JSONObject buildNormalTranscodeConfig() { JSONObject transcodeTemplate = new JSONObject(); //模板类型< Normal: 平时转码模板;VideoPackage:视频流打包模板;SubtitlePackage:字幕打包模板> transcodeTemplate.put("Type","Normal"); //模板称呼 transcodeTemplate.put("TemplateName", "平时转码模板mp4"); //了了度 transcodeTemplate.put("Definition", "HD"); //视频流转码确立 JSONObject video = new JSONObject(); video.put("Width", 1280); //video.put("Height", 720); video.put("Bitrate", 1500); video.put("Fps", 25); //video.put("Remove", false); video.put("Codec", "H.264"); video.put("Gop", "250"); video.put("LongShortMode", false); transcodeTemplate.put("Video", video); //音频流转码确立 JSONObject audio = new JSONObject(); audio.put("Codec", "AAC"); audio.put("Bitrate", "64"); audio.put("Channels", "2"); audio.put("Samplerate", "32000"); transcodeTemplate.put("Audio", audio); //封装容器 JSONObject container = new JSONObject(); container.put("Format", "mp4"); transcodeTemplate.put("Container", container); //字幕替换确立 JSONObject subtitleSetting = new JSONObject(); JSONArray subtitleList = new JSONArray(); JSONObject subtitle = new JSONObject(); //字幕文献的OSS地址(不维持https地址) subtitle.put("SubtitleUrl", "-8db8d2****3e1c9256.oss-cn-shanghai.aliyuncs.com/subtitle/3215879C9F724A43BC84C63BE2AA19AF****.srt"); //字幕内容的编码法式,取值:auto(自动检测)、UTF-8、GBK、BIG5 subtitle.put("CharEncode", "UTF-8"); subtitleList.add(subtitle); transcodeTemplate.put("SubtitleList", subtitleList); return transcodeTemplate; } /** * 视频打包确立 * * @return */ private static JSONObject buildVideoPackageConfig() { JSONObject transcodeTemplate = new JSONObject(); //模板类型< Normal: 平时转码模板;VideoPackage:视频流打包模板;SubtitlePackage:字幕打包模板> transcodeTemplate.put("Type","VideoPackage"); //模板称呼 transcodeTemplate.put("TemplateName", "HLS运动打包"); //了了度 transcodeTemplate.put("Definition", "LD"); //视频流转码确立 JSONObject video = new JSONObject(); video.put("Width", 1280); //video.put("Height", 720); video.put("Bitrate", 1500); video.put("Fps", 25); //video.put("Remove", false); video.put("Codec", "H.264"); video.put("Gop", "250"); video.put("LongShortMode", false); transcodeTemplate.put("Video", video); //音频流转码确立 JSONObject audio = new JSONObject(); audio.put("Codec", "AAC"); audio.put("Bitrate", "64"); audio.put("Channels", "2"); audio.put("Samplerate", "32000"); transcodeTemplate.put("Audio", audio); //封装容器 JSONObject container = new JSONObject(); container.put("Format", "m3u8"); transcodeTemplate.put("Container", container); //封装容器确立为m3u8,必须确立MuxConfig JSONObject muxConfig = new JSONObject(); JSONObject segment = new JSONObject(); segment.put("Duration", "10");//单元是秒 muxConfig.put("Segment", segment); transcodeTemplate.put("MuxConfig",muxConfig); //打包确立 JSONObject packageSetting = new JSONObject(); //打包类型:取值:HLSPackage (HLS自安妥码率打包) packageSetting.put("PackageType","HLSPackage"); JSONObject packageConfig = new JSONObject(); packageConfig.put("BandWidth","500000"); packageSetting.put("PackageConfig",packageConfig); transcodeTemplate.put("PackageSetting",packageSetting); return transcodeTemplate; } /** * 字幕打包确立 * * @return */ private static JSONObject buildSubtitlePackageConfig() { JSONObject transcodeTemplate = new JSONObject(); //模板类型< Normal: 平时转码模板;VideoPackage:视频流打包模板;SubtitlePackage:字幕打包模板> transcodeTemplate.put("Type","SubtitlePackage"); //模板称呼 transcodeTemplate.put("TemplateName", "多字幕打包"); //了了度 transcodeTemplate.put("Definition", "HD"); //视频流转码确立 JSONObject video = new JSONObject(); video.put("Width", 1280); //video.put("Height", 720); video.put("Bitrate", 1500); video.put("Fps", 25); //video.put("Remove", false); video.put("Codec", "H.264"); video.put("Gop", "250"); video.put("LongShortMode", false); transcodeTemplate.put("Video", video); //音频流转码确立 JSONObject audio = new JSONObject(); audio.put("Codec", "AAC"); audio.put("Bitrate", "64"); audio.put("Channels", "2"); audio.put("Samplerate", "32000"); transcodeTemplate.put("Audio", audio); //封装容器 JSONObject container = new JSONObject(); container.put("Format", "m3u8"); transcodeTemplate.put("Container", container); //封装容器确立为m3u8,必须确立MuxConfig JSONObject muxConfig = new JSONObject(); JSONObject segment = new JSONObject(); segment.put("Duration", "10");//单元是秒 muxConfig.put("Segment", segment); transcodeTemplate.put("MuxConfig",muxConfig); /* 字幕文献OSS地址(不维持https地址、不维持纯CDN域名加快地址) 讲解:字幕文献必须和视频源文献在归拢个区域(举例:cn-shanghai),况兼在归拢个Bucket当中 */ //字幕打包模板 JSONObject subtitlePackageConfig = new JSONObject(); subtitlePackageConfig.put("Type","SubtitlePackage"); //字幕打包确立 JSONObject subtitlePackageSetting = new JSONObject(); //打包类型:取值:HLSPackage (HLS自安妥码率打包) subtitlePackageSetting.put("PackageType","HLSPackage"); JSONArray subtitleExtractConfigs = new JSONArray(); //字幕1 JSONObject subtitleExtractConfig = new JSONObject(); JSONArray subtitleUrlList = new JSONArray(); subtitleUrlList.add("-bfefbb9****e1c7426.oss-cn-shanghai.aliyuncs.com/subtitle/260447BA31D24F9E9E7752BF73F1319B****.vtt"); subtitleExtractConfig.put("SubtitleUrlList",subtitleUrlList); subtitleExtractConfig.put("Language","cn"); subtitleExtractConfig.put("Format","vtt"); subtitleExtractConfig.put("Name","中语-test"); //字幕2 JSONObject subtitleExtractConfig2 = new JSONObject(); JSONArray subtitleUrlList2 = new JSONArray(); subtitleUrlList2.add("-bfefbb9****3e1c7426.oss-cn-shanghai.aliyuncs.com/subtitle/661C67325E0543F0BB8CA7AAB756E6D8****.vtt"); subtitleExtractConfig2.put("SubtitleUrlList",subtitleUrlList2); subtitleExtractConfig2.put("Language","en-US"); subtitleExtractConfig2.put("Format","vtt"); subtitleExtractConfig2.put("Name","英文-test"); subtitleExtractConfigs.add(subtitleExtractConfig); subtitleExtractConfigs.add(subtitleExtractConfig2); subtitlePackageSetting.put("SubtitleExtractConfigList",subtitleExtractConfigs); transcodeTemplate.put("PackageSetting",subtitlePackageSetting); return transcodeTemplate; } public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException { // 点播干事接入区域 String regionId = "cn-shanghai"; DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret); DefaultAcsClient client = new DefaultAcsClient(profile); return client; }
发起多码率转码。
public static void main(String[] args) { //regionId凭据干事接入地址填写,例:接入干事在上海,则填cn-shanghai String regionId = "cn-shanghai"; // 阿里云账号AccessKey领有总共API的探问权限,提出您使用RAM用户进行API探问或日常运维。 // 激烈提出不要把AccessKey ID和AccessKey Secret保存到工程代码里,不然可能导致AccessKey裸露,禁锢您账号下总共资源的安全。 // 本示例通过从环境变量中读取AccessKey,来已毕API探问的身份考证。运转代码示例前,请确立环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。 DefaultProfile profile = DefaultProfile.getProfile(regionId, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); IAcsClient client = new DefaultAcsClient(profile); String videoId = "76913816d****8e57e8c2952"; String templateId = "4733b3a5****ae36ac22d34"; try { SubmitTranscodeJobsResponse response = submitTranscodeJobs(client,videoId,templateId); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } } /** * 拿起转码功课 * 传入视频ID和模板组ID * * @param client * @param videoId * @param templateGroupId * @return * @throws Exception */ public static SubmitTranscodeJobsResponse submitTranscodeJobs(DefaultAcsClient client, String videoId, String templateGroupId) throws Exception { SubmitTranscodeJobsRequest request = new SubmitTranscodeJobsRequest(); //需要转码的视频ID request.setVideoId(videoId); //转码模板组ID request.setTemplateGroupId(templateGroupId); //确立转码优先级(默许级别为6,数字越大,级别越高),鸿沟是[1-10] request.setPriority("8"); JSONObject overrideParams = buildOverrideParams(); //消散参数 request.setOverrideParams(overrideParams.toJSONString()); return client.getAcsResponse(request); } //以下为打包字幕替换参数构建示例 public static JSONObject buildOverrideParams() { JSONObject overrideParams = new JSONObject(); //打包字幕替换确立 JSONObject packageSubtitleSetting = new JSONObject(); JSONArray packageSubtitleList = new JSONArray(); JSONObject packageSubtitle = new JSONObject(); //需要替换的打包模板组中字幕模板的ID packageSubtitle.put("SubtitlePackageTemplateId", "69fa6ee58****e8492c76168****"); //Language参数仅用于检索需要替换的字幕文献,而Language本人不会被替换,不存在的字幕道话不可替换。 packageSubtitle.put("Language", "cn"); //字幕文献的OSS地址(不维持https地址),字幕文献需要与视频在归拢个存储区域。 packageSubtitle.put("SubtitleUrl", "-bfefbb9****3e1c7426.oss-cn-shanghai.aliyuncs.com/subtitle/043956117D0C475EAB0CE8C4F7294221****.vtt"); packageSubtitleList.add(packageSubtitle); packageSubtitleSetting.put("PackageSubtitleList", packageSubtitleList); overrideParams.put("PackageSubtitleSetting", packageSubtitleSetting); return overrideParams; }
恶果展示。
多码率打包后码流展示:(2路转码流,1路自安妥流)
在点播扫尾台,给与媒资库 > 音/视频,单击筹算视频(上一步历程媒体处理的视频)的惩处,给与视频地址页签。

播放恶果展示:(使用上图中自安妥的地址播放)
在Aliplayer播放器的基础确立页,输入播放地址(使用上图中视频地址页中自安妥的地址),在播放预览页查看播放恶果。
