搜狐云台多媒体服务 Java SDK User Guide 搜狐云台多媒体服务 Java SDK User Guide 欢迎使用 1. 基本概念 2.Media java 客户端 2.1 初始化客户端 2.2 初始化客户端 3.Job 操作 3.1 创建 Job 3.2 查询 Job 3.3 取消 Job 3.4 检验 job 参数 欢迎使用 本文档是搜狐多媒体服务提供的开发者指南文档 本文档并不会详细描述 SDK 的所有细节, 只会对 SDK 开发的相关概念进行解释, 并根据开发者面临的大部分需求给出相关的 SDK 用法和示例 搜狐多媒体服务, 是以搜狐云存储服务为基础, 提供的一款多媒体处理服务 通过标准的 Rest API 接口, 用户可以方便地在任何时间 地点进行多媒体处理 目前提供的处理服务包括视频 音频转码, 视频加水印, 视频放缩, 视频裁剪等
1. 基本概念 作业 (job) 一次多媒体操作称之为一个作业, 一次多媒体请求里可以包含多个作业 容器 (container) 多媒体文件的格式 编码器 (codec) 音视频文件的编码格式 搜狐多媒体服务支持转码格式 Container Audio Codecs Video Codecs flac flac not supported flv aac,mp3 h264 mp4 aac,mp3 h264 gif not supported gif mp3 mp3 not supported mpg mp2 mpeg1video oga flac,vorbis not supported ogg flac,vorbis not supported ts aac,mp3 h264 webm vorbis vp8 视频放缩参数 fit: 按照原图比例缩放, 直到宽度和高度同时满足小于等于指定的宽和高 fill: 限定宽度和高度, 原图按照指定的宽高缩放, 缩放到一条边满足指定大小, 即停止缩放, 对另外一边进行居中剪裁 stretch: 直接拉伸图像到 maxwidth 和 maxheight keep: 保持不大于 maxwidth 和 maxheight, 如果大于, 则居中裁剪 其他内容参见搜狐云台存储服务 Java SDK User Guide
2.Media java 客户端 SohuCSMediaClient 是多媒体服务的 Java 客户端, 与多媒体服务器的交互都由该对象发起 它需要使用账户相关信息进行初始化 2.1 初始化客户端 为了完成与服务端的交互,SCS 客户端必须使用 AccessKey 和 SecretKey 完成初始化 初始化代码如下 : public class Main { String accesskey = "<your accesskey>"; String secretkey = "<your secretkey>"; // 初始化多媒体客户端对象 BasicSohuCSCredentials(accesskey, secretkey); SohuCSMediaClient media= new 2.2 初始化客户端 为了使访问准确, 减少网络转发的时间消耗, 需要初始化客户端后设置服务访问地址 (endpoint) 设置服务访问地址代码如下 : media.setendpoint("bjcnc.media.sohucs.com");
3.Job 操作 3.1 创建 Job 创建多媒体作业的代码如下 : import com.sohucs.auth.basicsohucscredentials; import com.sohucs.auth.sohucscredentials; import com.sohucs.services.identitymanagement.sohucsidentitymanagement; import com.sohucs.services.scs.sohucsmediaclient; import com.sohucs.services.scs.sohuscs; import com.sohucs.services.scs.video.*; import java.util.linkedlist; import java.util.list; import java.util.map; public class Test4Video { try { BasicSohuCSCredentials("your accesskey", "your secretkey"); SohuCSMediaClient client = new client.setendpoint("bjcnc.media.sohucs.com"); // 创建转码作业 CreateTranscodeJobRequest jobrequest = new CreateTranscodeJobRequest(); // 设置输入参数 :bucket,key JobInput jobinput = new JobInput(); jobinput.setbucket("test"); jobinput.setkey("origin.flv"); jobrequest.setjobinput(jobinput); thumbnail // 设置输出参数 :bucket,key,rocate,video,audio,watermark, CreateJobOutput createjoboutput = new CreateJobOutput(); createjoboutput.setkey("result.mp4"); createjoboutput.setbucket("output");
createjoboutput.setforce(true);// 无论生成文件是否存在, 强制转换 createjoboutput.setmediacontainer("mp4"); createjoboutput.setrotate("90");// 视频旋转 // 设置 video 参数 VideoParameters videoparameters = new VideoParameters(); videoparameters.setcodec("h264");// 编码方式 videoparameters.setframerate("auto");// 设置帧率 videoparameters.setmaxwidth("500");// 最大宽 videoparameters.setmaxheight("500");// 最大高 videoparameters.setsizingpolicy("fit");// 视频放缩参数 videoparameters.setaspectratio("auto");// 放缩比例, 当 sizing policy 未设置时, 此项生效 createjoboutput.setvideo(videoparameters); // 设置 audio 参数 AudioParameters audioparameters = new AudioParameters(); audioparameters.setcodec("aac");// 编码方式 audioparameters.setbitrate("42000");// 音频比特率 audioparameters.setsamplerate("auto");// 音频采样率 audioparameters.setchannels("auto");// 声道 createjoboutput.setaudio(audioparameters); // 设置水印参数 WatermarkParameter watermarkparameter = new WatermarkParameter(); watermarkparameter.setbucket("bjcnctest"); watermarkparameter.setkey("logo.png"); watermarkparameter.sethorizontalalign("left");// 水平方向位置 watermarkparameter.sethorizontaloffset("0");// 水平方向偏移 watermarkparameter.setverticalalign("center");// 垂直方向位置 watermarkparameter.setverticaloffset("0");// 垂直方向偏移 watermarkparameter.setmaxwidth("100");// 最大宽 watermarkparameter.setmaxheight("100");// 最大高 watermarkparameter.setsizingpolicy("fill");// 放缩参数 // 可以为同一个文件添加多个水印, 最多 4 个 List<WatermarkParameter> waterlist = new LinkedList<WatermarkParameter>(); waterlist.add(watermarkparameter); createjoboutput.setwatermarks(waterlist); // 可以在一次请求中, 对同一个文件进行多个转码操作 List<CreateJobOutput> outputlist = new LinkedList<CreateJobOutput>(); outputlist.add(createjoboutput); jobrequest.setoutputlist(outputlist);
// 作业完成时, 回调 url jobrequest.setcallback("http://www.baidu.com"); CreateJobResult result = client.createtranscodejob(jobrequest); Map<String, String> jobs = result.getjobs(); for (Map.Entry entry : jobs.entryset()) { // 如果作业创建成功, 返回结果为 jobid 和任务内容 System.out.println(entry.getKey() + ", " + entry.getvalue().tostring()); System.out.println(result.getJobs()); catch (SohuCSVideoServiceException e) { System.out.println("error message : " + e.geterrormessage()); 3.2 查询 Job 代码如下 : import com.sohucs.auth.basicsohucscredentials; import com.sohucs.auth.sohucscredentials; import com.sohucs.services.identitymanagement.sohucsidentitymanagement; import com.sohucs.services.scs.sohucsmediaclient; import com.sohucs.services.scs.sohuscs; import com.sohucs.services.scs.video.*; public class Test4Video { try { BasicSohuCSCredentials("your accesskey", "your secretkey"); SohuCSMediaClient client = new client.setendpoint("bjcnc.media.sohucs.com"); // 通过 jobid 可以查询作业状态 ReadJobRequest readjobrequest = new
ReadJobRequest().withJobId("jobid"); ReadJobResult readjobresult = client.readjob(readjobrequest); for (String job : readjobresult.getjobs()) { System.out.println(job); catch (SohuCSVideoServiceException e) { System.out.println("error message : " + e.geterrormessage()); 3.3 取消 Job 取消作业的代码如下 : import com.sohucs.auth.basicsohucscredentials; import com.sohucs.auth.sohucscredentials; import com.sohucs.services.identitymanagement.sohucsidentitymanagement; import com.sohucs.services.scs.sohucsmediaclient; import com.sohucs.services.scs.sohuscs; import com.sohucs.services.scs.video.*; public class Test4Video { try { BasicSohuCSCredentials("your accesskey", "your secretkey"); SohuCSMediaClient client = new client.setendpoint("bjcnc.media.sohucs.com"); // 通过 jobid 取消已经创建的任务 // 如果作业尚未被处理, 则可以取消 ; 如果作业已经或正在处理, 则不能取消 CancelJobRequest canceljobrequest = new CancelJobRequest().withJobId("jobId"); CancelJobResult canceljobresult = client.canceljob(canceljobrequest); System.out.println(cancelJobResult.getJobStatus()); catch (SohuCSVideoServiceException e) {
System.out.println("error message : " + e.geterrormessage()); 3.4 检验 job 参数 当不确定作业输入参数是否合法时, 可通过如下接口对作业进行检验, 服务端只返回验证结果而不创建作业 检验作业参数的代码如下 : import com.sohucs.auth.basicsohucscredentials; import com.sohucs.auth.sohucscredentials; import com.sohucs.services.identitymanagement.sohucsidentitymanagement; import com.sohucs.services.scs.sohucsmediaclient; import com.sohucs.services.scs.sohuscs; import com.sohucs.services.scs.video.*; public class Test4Video { try { BasicSohuCSCredentials("IGPP7JzKRe9irCiD7iy2AQ==", "52LU4QO6Gup2ImypXeTNLQ=="); SohuCSMediaClient client = new client.setendpoint("bjcnc.media.sohucs.com");//10.16.42.39:8085 // 创建转码作业, 参数设置参考 create job CreateTranscodeJobRequest jobrequest = new CreateTranscodeJobRequest(); VerifyJobResult verifyjobresult = client.verifytranscodejob(jobrequest); System.out.println(verifyJobResult.getVerifyResult()); catch (SohuCSVideoServiceException e) { System.out.println("error message : " + e.geterrormessage());