A edição online do ApsaraVideo VOD combina materiais de áudio, vídeo e texto para gerar novos vídeos. Os exemplos a seguir com o SDK Java demonstram como criar e gerenciar projetos de edição online e enviar jobs de produção de vídeo.
Observações de uso
Todos os exemplos deste tópico usam um par de AccessKey para inicializar uma instância de cliente.
Para obter detalhes sobre os parâmetros de solicitação e resposta, acesse o Alibaba Cloud OpenAPI Explorer e abra a aba API Documentations.
Para visualizar exemplos de SDK de outras operações de API, consulte o Alibaba Cloud OpenAPI Explorer. Na aba Parameters, especifique os parâmetros e inicie a chamada. Depois, selecione a versão do SDK e a linguagem na aba SDK Sample Code para visualizar e baixe o código.
Os exemplos deste tópico usam o SDK V1.0. Para exemplos da V2.0, selecione a versão correta do SDK no OpenAPI Explorer.

Inicializar um cliente
Antes de usar o SDK, inicialize um cliente conforme descrito em Inicialização.
Enviar um job de produção de vídeo com base em uma timeline
Chame ProduceEditingProjectVideo para enviar um job de produção de vídeo com base em uma timeline.
Essa abordagem é adequada para a maioria dos cenários de produção de vídeo.
OpenAPI Explorer: ProduceEditingProjectVideo.
Código de exemplo:
Exemplos adicionais de edição e composição de timeline: Edição de Vídeo - Exemplos de Uso.
import com.aliyuncs.auth.AlibabaCloudCredentials;
import com.aliyuncs.auth.EnvironmentVariableCredentialsProvider;
import com.aliyuncs.vod.model.v20170321.ProduceEditingProjectVideoRequest;
import com.aliyuncs.vod.model.v20170321.ProduceEditingProjectVideoResponse;
/**
* Obtain the AccessKey information.
*/
public static DefaultAcsClient initVodClient() throws ClientException {
String regionId = "cn-shanghai"; // Specify the region in which ApsaraVideo VOD is activated.
// The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M.
// We recommend that you do not save your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked. As a result, the security of all resources in your account is compromised.
// In this example, the system reads the AccessKey pair from environment variables to implement authentication for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET.
DefaultProfile profile = DefaultProfile.getProfile(regionId, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
/**
* Sample Code
*/
public static void main(String[] args) throws Exception {
DefaultAcsClient client = initVodClient();
ProduceEditingProjectVideoRequest request = new ProduceEditingProjectVideoRequest();
// Build Editing Project Timeline
request.setTimeline(buildTimeline());
// Set Produce Media Metadata
request.setMediaMetadata(buildMediaMetadata());
// Set Produce Configuration
request.setProduceConfig(buildProduceConfig());
ProduceEditingProjectVideoResponse response = null;
try {
response = client.getAcsResponse(request);
if (response != null){
// Produce Media ID
System.out.println("MediaId:" + response.getMediaId());
// Request ID
System.out.println("RequestId:" + response.getRequestId());
}
} catch (ServerException e){
System.out.println("ServerError code:" + e.getErrCode() + ", message:" + e.getErrMsg());
} catch (ClientException e){
System.out.println("ClientError code:" + e.getErrCode() + ", message:" + e.getErrMsg());
} catch (Exception e) {
System.out.println("ErrorMessage:" + e.getLocalizedMessage());
}
}
public static String buildMediaMetadata(){
JSONObject mediaMetadata = new JSONObject();
// Produce Media Title
mediaMetadata.put("Title", "Title");
// Produce Media Description
mediaMetadata.put("Description", "Description");
// Produce Media UserDefined Cover URL
mediaMetadata.put("CoverURL", "http://192.168.0.0/16/media/cover/mediaid.jpg");
// Produce Media Category ID
mediaMetadata.put("CateId", null);
// Produce Media Category Name
mediaMetadata.put("Tags", "Tag1,Tag2,Test");
return mediaMetadata.toString();
}
public static String buildProduceConfig(){
JSONObject produceConfig = new JSONObject();
/*
The production process can generate media source files. You can transcode the generated source files. Specify the TemplateGroupId parameter if you want to transcode the generated source files.
1. Not required
2. Use default transcode template group id when empty
*/
produceConfig.put("TemplateGroupId", null);
return produceConfig.toString();
}
/**
* This Sample shows how to merge two videos
*/
public static String buildTimeline(){
JSONObject timeline = new JSONObject();
// Video Track
JSONArray videoTracks = new JSONArray();
JSONObject videoTrack = new JSONObject();
// Video Track Clips
JSONArray videoTrackClips = new JSONArray();
JSONObject videoTrackClip1 = new JSONObject();
videoTrackClip1.put("MediaId", "11119b4d7cf14dc7b83b0e801cbe****");
videoTrackClips.add(videoTrackClip1);
JSONObject videoTrackClip2 = new JSONObject();
videoTrackClip2.put("MediaId", "22229b4d7cf14dc7b83b0e801cbe****");
videoTrackClips.add(videoTrackClip2);
videoTrack.put("VideoTrackClips", videoTrackClips);
videoTracks.add(videoTrack);
timeline.put("VideoTracks", videoTracks);
return timeline.toString();
}
Enviar um job de produção de vídeo com base em um projeto de edição online
Chame ProduceEditingProjectVideo para enviar um job de produção de vídeo com base em um projeto de edição online.
Use este método quando precisar de controle refinado sobre os projetos de edição online.
OpenAPI Explorer: ProduceEditingProjectVideo.
Código de exemplo:
import com.aliyuncs.auth.AlibabaCloudCredentials;
import com.aliyuncs.auth.EnvironmentVariableCredentialsProvider;
import com.aliyuncs.vod.model.v20170321.ProduceEditingProjectVideoRequest;
import com.aliyuncs.vod.model.v20170321.ProduceEditingProjectVideoResponse;
/**
* Obtain the AccessKey information.
*/
public static DefaultAcsClient initVodClient() throws ClientException {
String regionId = "cn-shanghai"; // Specify the region in which ApsaraVideo VOD is activated.
// The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M.
// We recommend that you do not save your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked. As a result, the security of all resources in your account is compromised.
// In this example, the system reads the AccessKey pair from environment variables to implement authentication for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET.
DefaultProfile profile = DefaultProfile.getProfile(regionId, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
/**
* Sample Code
*/
public static void main(String[] args) throws Exception {
DefaultAcsClient client = initVodClient();
ProduceEditingProjectVideoRequest request = new ProduceEditingProjectVideoRequest();
// Set Editing Project ID need to produce
request.setProjectId("ProjectId");
// Set Produce Media Metadata
request.setMediaMetadata(buildMediaMetadata());
// Set Produce Configuration
request.setProduceConfig(buildProduceConfig());
ProduceEditingProjectVideoResponse response = null;
try {
response = client.getAcsResponse(request);
if (response != null){
// Produce Media ID
System.out.println("MediaId:" + response.getMediaId());
// Request ID
System.out.println("RequestId:" + response.getRequestId());
}
} catch (ServerException e){
System.out.println("ServerError code:" + e.getErrCode() + ", message:" + e.getErrMsg());
} catch (ClientException e){
System.out.println("ClientError code:" + e.getErrCode() + ", message:" + e.getErrMsg());
} catch (Exception e) {
System.out.println("ErrorMessage:" + e.getLocalizedMessage());
}
}
public static String buildMediaMetadata(){
JSONObject mediaMetadata = new JSONObject();
// Produce Media Title
mediaMetadata.put("Title", "Title");
// Produce Media Description
mediaMetadata.put("Description", "Description");
// Produce Media UserDefined Cover URL
mediaMetadata.put("CoverURL", "http://192.168.0.0/16/media/cover/mediaid.jpg");
// Produce Media Category ID
mediaMetadata.put("CateId", null);
// Produce Media Category Name
mediaMetadata.put("Tags", "Tag1,Tag2,Test");
return mediaMetadata.toString();
}
public static String buildProduceConfig(){
JSONObject produceConfig = new JSONObject();
/*
The production process can generate media source files. You can transcode the generated source files. Specify the TemplateGroupId parameter if you want to transcode the generated source files.
1. Not required
2. Use default transcode template group id when empty
*/
produceConfig.put("TemplateGroupId", null);
return produceConfig.toString();
}
Criar um projeto de edição online
Chame AddEditingProject para crie um projeto de edição online.
OpenAPI Explorer: AddEditingProject.
Código de exemplo:
import com.aliyuncs.auth.AlibabaCloudCredentials;
import com.aliyuncs.auth.EnvironmentVariableCredentialsProvider;
import com.aliyuncs.vod.model.v20170321.AddEditingProjectRequest;
import com.aliyuncs.vod.model.v20170321.AddEditingProjectResponse;
/**
* Obtain the AccessKey information.
*/
public static DefaultAcsClient initVodClient() throws ClientException {
String regionId = "cn-shanghai"; // Specify the region in which ApsaraVideo VOD is activated.
// The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M.
// We recommend that you do not save your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked. As a result, the security of all resources in your account is compromised.
// In this example, the system reads the AccessKey pair from environment variables to implement authentication for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET.
DefaultProfile profile = DefaultProfile.getProfile(regionId, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
/**
* Sample Code
*/
public static void main(String[] args) throws Exception {
DefaultAcsClient client = initVodClient();
AddEditingProjectRequest request = new AddEditingProjectRequest();
// Build Editing Project Timeline
request.setTimeline(buildTimeline());
// Set Editing Project Title
request.setTitle("Editing Project Title");
// Set Editing Project Description
request.setDescription("Editing Project Description");
// Set Editing Project Cover URL
request.setCoverURL("http://192.168.0.0/16/editingproject/cover/projectid.jpg");
AddEditingProjectResponse response = null;
try {
response = client.getAcsResponse(request);
if (response != null){
if (response.getProject() != null){
System.out.println("Editing Project ID:" + response.getProject().getProjectId());
System.out.println("Editing Project Title:" + response.getProject().getTitle());
System.out.println("Editing Project Create Time:" + response.getProject().getCreationTime());
System.out.println("Editing Project Description:" + response.getProject().getDescription());
System.out.println("Editing Project Status:" + response.getProject().getStatus());
}
// Request ID
System.out.println("RequestId:" + response.getRequestId());
}
} catch (ServerException e){
System.out.println("ServerError code:" + e.getErrCode() + ", message:" + e.getErrMsg());
} catch (ClientException e){
System.out.println("ClientError code:" + e.getErrCode() + ", message:" + e.getErrMsg());
} catch (Exception e) {
System.out.println("ErrorMessage:" + e.getLocalizedMessage());
}
}
/**
* This Sample shows how to merge two videos
*/
public static String buildTimeline(){
JSONObject timeline = new JSONObject();
// Video Track
JSONArray videoTracks = new JSONArray();
JSONObject videoTrack = new JSONObject();
// Video Track Clips
JSONArray videoTrackClips = new JSONArray();
JSONObject videoTrackClip1 = new JSONObject();
videoTrackClip1.put("MediaId", "11119b4d7cf14dc7b83b0e801cbe****");
videoTrackClips.add(videoTrackClip1);
JSONObject videoTrackClip2 = new JSONObject();
videoTrackClip2.put("MediaId", "22229b4d7cf14dc7b83b0e801cbe****");
videoTrackClips.add(videoTrackClip2);
videoTrack.put("VideoTrackClips", videoTrackClips);
videoTracks.add(videoTrack);
timeline.put("VideoTracks", videoTracks);
return timeline.toString();
}
Modificar um projeto de edição online
Chame UpdateEditingProject para modifique um projeto de edição online.
OpenAPI Explorer: UpdateEditingProject.
Código de exemplo:
import com.aliyuncs.auth.AlibabaCloudCredentials;
import com.aliyuncs.auth.EnvironmentVariableCredentialsProvider;
import com.aliyuncs.vod.model.v20170321.UpdateEditingProjectRequest;
import com.aliyuncs.vod.model.v20170321.UpdateEditingProjectResponse;
/**
* Obtain the AccessKey information.
*/
public static DefaultAcsClient initVodClient() throws ClientException {
String regionId = "cn-shanghai"; // Specify the region in which ApsaraVideo VOD is activated.
// The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M.
// We recommend that you do not save your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked. As a result, the security of all resources in your account is compromised.
// In this example, the system reads the AccessKey pair from environment variables to implement authentication for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET.
DefaultProfile profile = DefaultProfile.getProfile(regionId, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
/**
* Sample Code
*/
public static void main(String[] args) throws Exception {
DefaultAcsClient client = initVodClient();
UpdateEditingProjectRequest request = new UpdateEditingProjectRequest();
request.setProjectId("YourProjectId");
// Set Editing Project Timeline
request.setTimeline(buildTimeline());
// Set Editing Project Title
request.setTitle("Editing Project Title");
// Set Editing Project Description
request.setDescription("Editing Project Description");
// Set Editing Project Cover URL
request.setCoverURL("http://192.168.0.0/16/editingproject/cover/projectid.jpg");
UpdateEditingProjectResponse response = null;
try {
response = client.getAcsResponse(request);
if (response != null){
// Request ID
System.out.println("RequestId:" + response.getRequestId());
}
} catch (ServerException e){
System.out.println("ServerError code:" + e.getErrCode() + ", message:" + e.getErrMsg());
} catch (ClientException e){
System.out.println("ClientError code:" + e.getErrCode() + ", message:" + e.getErrMsg());
} catch (Exception e) {
System.out.println("ErrorMessage:" + e.getLocalizedMessage());
}
}
/**
* This Sample shows how to merge two videos
*/
public static String buildTimeline(){
JSONObject timeline = new JSONObject();
// Video Track
JSONArray videoTracks = new JSONArray();
JSONObject videoTrack = new JSONObject();
// Video Track
JSONArray videoTrackClips = new JSONArray();
JSONObject videoTrackClip1 = new JSONObject();
videoTrackClip1.put("MediaId", "11119b4d7cf14dc7b83b0e801cbe****");
videoTrackClips.add(videoTrackClip1);
JSONObject videoTrackClip2 = new JSONObject();
videoTrackClip2.put("MediaId", "22229b4d7cf14dc7b83b0e801cbe****");
videoTrackClips.add(videoTrackClip2);
videoTrack.put("VideoTrackClips", videoTrackClips);
videoTracks.add(videoTrack);
timeline.put("VideoTracks", videoTracks);
return timeline.toString();
}
Excluir um projeto de edição online
Chame DeleteEditingProject para exclua um projeto de edição online.
OpenAPI Explorer: DeleteEditingProject.
Consultar detalhes de um projeto de edição online
Chame GetEditingProject para consultar os detalhes de um projeto de edição online.
OpenAPI Explorer: ou GetEditingProject.
Consultar projetos de edição online
Chame SearchEditingProject para pesquisar projetos de edição online.
OpenAPI Explorer: ou SearchEditingProject.
Definir materiais para um projeto de edição online
Chame SetEditingProjectMaterials para defina materiais em um projeto de edição online.
OpenAPI Explorer: SetEditingProjectMaterials.
Consultar materiais em um projeto de edição online
Chame GetEditingProjectMaterials para consultar os materiais de um projeto de edição online.
OpenAPI Explorer: GetEditingProjectMaterials.