华为云媒体处理MPC对接使用完全指南:从入门到生产实践

apphuang2026年06月29日 10:07:3810

1. 媒体处理MPC概述

媒体处理服务(Media Processing Center,简称MPC)是华为云提供的一种多媒体数据处理服务。它通过经济、弹性和高可扩展的转换方法,将存储于对象存储服务OBS上的音视频转码为适应各种终端(PC、TV、Phone等)播放的格式。MPC不仅支持常规的音视频转码,还实现了抽帧截图、图片水印、视频加密等功能,能够满足多样化的业务场景需求。

MPC的核心优势在于其结合了对象存储和云计算能力,以低成本、高效率且任意规模在线对媒体文件进行转码。它采用感知编码技术,分析视频中的每个场景、动作、内容和纹理,在保证视频画质的前提下实现更低的码率和带宽消耗。MPC预置了大量的音视频转码模板,同时也支持用户根据实际需求自定义转码模板和模板组。

需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联

在使用MPC服务之前,有几个关键概念需要了解。MPC本身不提供媒资存储功能,所有待处理的音视频文件必须预先上传到OBS桶中。MPC服务与OBS桶必须在同一区域,例如都位于“华北-北京四”区域。调用IAM接口的区域也需要与调用媒体处理接口的区域一致。此外,MPC设置了API流量控制,单租户接口流控为100次/分钟,接口总体流控为1000次/分钟。

2. 服务开通与准备工作

2.1 开通MPC服务

首次使用MPC服务时,需要登录华为云控制台,在服务列表中找到“媒体处理 MPC”并进入服务页面。首次开通时会进入计费详情页面,用户需要查看各个计费项的计费详情,并仔细阅读《华为云媒体处理服务协议》后,再开通使用MPC服务。单击“立即开通”即可完成服务开通。

2.2 准备工作

在使用MPC服务之前,需要完成以下准备工作:

  • 创建OBS桶:在MPC服务所在区域创建一个OBS桶,用于存储原始音视频文件和转码输出文件。建议将原始文件和输出文件放在不同的桶中,便于管理和权限控制。
  • 上传音视频文件:将待处理的音视频文件上传到OBS桶中。支持的上传方式包括控制台直接上传、OBS Browser+图形化工具、obsutil命令行工具以及SDK等方式。
  • 获取云资源授权:需要将存储原始视频和转码视频的桶授权给媒体处理服务,允许MPC访问OBS桶中的文件。在MPC控制台的“云资源授权”页面完成授权操作。
  • 获取项目ID:在“我的凭证 > API凭证”页面查看项目ID,后续调用API时需要用到。
  • 获取Endpoint:从地区和终端节点页面获取MPC服务的Endpoint。
  • 准备AK/SK:在“我的凭证 > 访问密钥”页面创建并获取访问密钥(AK/SK),用于SDK调用时的认证。

3. 控制台操作指南

3.1 创建视频转码任务

通过MPC控制台创建视频转码任务是最直观的操作方式。具体步骤如下:

  1. 登录媒体处理控制台。
  2. 在左侧导航树中选择“媒体处理 > 转码”,进入转码页面。
  3. 单击“创建任务”,进入创建任务页面。
  4. 配置基本参数,包括输入文件(从OBS桶中选择)、输出路径、转码模板等。
  5. 选择转码模板。媒体处理服务中预置了大量的一进一出和一进多出模板,建议优先使用系统预置模板。系统预置模板的相关参数可以在“全局设置 > 预置模板”页面查看。
  6. 配置完成,单击“确定”,转码任务开始执行。
  7. 在转码任务列表中查看任务执行情况。当前仅支持查看60天内的转码详情。
  8. 若转码成功,可在“转码输出”列单击“输出路径”查看转码后的视频文件。若转码失败,可通过“转码输出”列查看失败原因。

3.2 创建转封装任务

转封装任务可以对视频文件进行封装格式转换,而不改变其分辨率和码率。操作步骤如下:

  1. 登录媒体处理控制台。
  2. 在左侧导航树中选择“媒体处理 > 转封装”,进入转封装页面。
  3. 单击“创建任务”,弹出创建转封装任务对话框。
  4. 配置转封装任务参数,包括输入文件、输出路径、输出格式等。
  5. 单击“确定”完成创建。
  6. 在任务列表中查看执行情况,当任务状态为“处理成功”时,可在输出路径中获取转封装后的文件。

转封装支持的输入格式包括MP3、MP4、FLV、TS,输出格式包括HLS和MP4。

3.3 创建截图任务

MPC支持对视频进行抽帧截图,可以在转码过程中配置截图参数,也可以单独调用截图接口对源视频直接截图。控制台操作方式与转码任务类似,在创建任务时配置截图参数即可。

4. API调用方式

除了控制台操作,MPC提供了完整的REST风格API,支持通过HTTPS请求调用。API调用方式适用于需要将MPC集成到自有业务系统的场景,可以实现自动化、批量化的媒体处理。

4.1 获取用户Token

调用MPC API首先需要获取用户Token用于认证鉴权。在“我的凭证”页面获取username、password、domainname、projectname。然后调用IAM接口获取Token:

POST https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens
Content-Type: application/json

{
  "auth": {
    "identity": {
      "methods": ["password"],
      "password": {
        "user": {
          "name": "用户名",
          "password": "用户登录密码",
          "domain": {
            "name": "用户所属的账号名称"
          }
        }
      }
    },
    "scope": {
      "project": {
        "name": "项目名称"
      }
    }
  }
}

调用IAM接口的区域需要与调用媒体处理接口的区域一致。获取Token后,在后续API调用的请求消息头中增加“X-Auth-Token”字段。

4.2 新建转码模板

若需要使用自定义的转码模板,可以先调用API创建转码模板。创建转码模板的API调用方式如下:

POST https://{endpoint}/v1/{project_id}/template/transcodings
X-Auth-Token: {用户Token}
Content-Type: application/json

{
  "template_name": "MP4_H.264_1920x1080_6000_HEAAC",
  "video": {
    "codec": 1,
    "bitrate": 6000,
    "profile": 3,
    "level": 15,
    "preset": 3,
    "ref_frames_count": 4,
    "max_iframes_interval": 5,
    "bframes_count": 4,
    "frame_rate": 1,
    "width": 1920,
    "height": 1080,
    "aspect_ratio": 0
  },
  "audio": {
    "codec": 1,
    "sample_rate": 4,
    "bitrate": 128,
    "channels": 2
  },
  "common": {
    "PVC": 0,
    "hls_interval": 5,
    "dash_interval": 5,
    "pack_type": 1
  }
}

请求响应成功后,返回转码模板ID。

4.3 新建水印模板

在转码时添加水印,需要先创建水印模板。创建水印模板的API调用方式如下:

POST https://{endpoint}/v1/{project_id}/template/watermark
X-Auth-Token: {用户Token}
Content-Type: application/json

{
  "template_name": "watermark_1920*1080_10*10_BottomLeft",
  "type": "Image",
  "image_process": "Grayed",
  "width": "1920",
  "height": "1080",
  "dx": "10",
  "dy": "10",
  "referpos": "BottomLeft",
  "timeline_start": "6",
  "timeline_duration": "8"
}

请求响应成功后,返回水印模板ID。

4.4 提交视频转码任务

完成转码模板和水印模板的创建后,可以提交视频转码任务:

POST https://{endpoint}/v1/{project_id}/transcodings
X-Auth-Token: {用户Token}
Content-Type: application/json

{
  "input": {
    "bucket": "example-bucket",
    "location": "region01",
    "object": "/mpc/input/sample.mp4"
  },
  "output": {
    "bucket": "example-bucket",
    "location": "region01",
    "object": "/mpc/output/"
  },
  "trans_template_id": [转码模板ID],
  "watermark": [
    {
      "template_id": 水印模板ID
    }
  ]
}

4.5 提交视频截图任务

若需要单独对视频进行截图而不转码,可以调用视频截图接口。提交截图任务的API调用方式如下:

POST https://{endpoint}/v1/{project_id}/thumbnails
X-Auth-Token: {用户Token}
Content-Type: application/json

{
  "input": {
    "bucket": "example-bucket",
    "location": "region01",
    "object": "/mpc/input/sample.MP4"
  },
  "output": {
    "bucket": "example-bucket",
    "location": "region01",
    "object": "/mpc/output/"
  },
  "tar": 1,
  "thumbnail_para": {
    "type": "DOTS",
    "dots": [2, 4, 6, 8, 10],
    "format": 0,
    "aspect_ratio": 1,
    "max_length": 480
  }
}

请求响应成功后,返回截图任务ID。可以通过查询截图任务接口获取任务执行状态。

5. SDK开发指南

MPC提供了多种编程语言的SDK,目前支持Java、Python和Go三种语言。使用SDK可以简化API调用过程,提高开发效率。下面以Python SDK和Java SDK为例进行说明。

5.1 Python SDK

5.1.1 环境准备

MPC SDK支持Python 3及以上版本。使用前需要安装两个核心包:huaweicloudsdkcore和huaweicloudsdkmpc。具体的SDK版本号请参见SDK开发中心。

pip install huaweicloudsdkcore
pip install huaweicloudsdkmpc

5.1.2 导入依赖模块

from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkcore.http.http_config import HttpConfig
from huaweicloudsdkmpc.v1 import *

5.1.3 配置客户端

# 配置认证信息
ak = os.environ.get("SDK_AK")
sk = os.environ.get("SDK_SK")
project_id = os.environ.get("PROJECT_ID")

credentials = BasicCredentials(ak, sk, project_id)

# 配置HTTP
config = HttpConfig.get_default_config()
config.timeout = 30

# 创建客户端
endpoint = "https://mpc.cn-north-4.myhuaweicloud.com"
client = MpcClient.new_builder() \
    .with_http_config(config) \
    .with_credentials(credentials) \
    .with_endpoint(endpoint) \
    .build()

5.1.4 创建转码模板

def create_transcode_template(client):
    request = CreateTransTemplateRequest()
    
    body = TransTemplate()
    body.template_name = "Python_SDK_MP4_1920x1080"
    
    video = Video()
    video.codec = 1  # H.264
    video.bitrate = 6000
    video.width = 1920
    video.height = 1080
    video.frame_rate = 1
    body.video = video
    
    audio = Audio()
    audio.codec = 1  # AAC
    audio.bitrate = 128
    audio.sample_rate = 4
    audio.channels = 2
    body.audio = audio
    
    common = Common()
    common.pvc = 0
    common.hls_interval = 5
    common.pack_type = 1
    body.common = common
    
    request.body = body
    
    try:
        response = client.create_trans_template(request)
        print(f"转码模板创建成功,模板ID: {response.template_id}")
        return response.template_id
    except exceptions.ClientRequestException as e:
        print(f"创建转码模板失败: {e}")
        return None

5.1.5 提交转码任务

def submit_transcode_task(client, template_id):
    request = CreateTranscodingTaskRequest()
    
    body = CreateTranscodingTaskReq()
    
    input_info = ObsObjInfo()
    input_info.bucket = "example-bucket"
    input_info.location = "cn-north-4"
    input_info.object = "/mpc/input/sample.mp4"
    body.input = input_info
    
    output_info = ObsObjInfo()
    output_info.bucket = "example-bucket"
    output_info.location = "cn-north-4"
    output_info.object = "/mpc/output/"
    body.output = output_info
    
    body.trans_template_id = [template_id]
    
    request.body = body
    
    try:
        response = client.create_transcoding_task(request)
        print(f"转码任务提交成功,任务ID: {response.task_id}")
        return response.task_id
    except exceptions.ClientRequestException as e:
        print(f"提交转码任务失败: {e}")
        return None

5.1.6 查询转码任务状态

def query_transcode_task(client, task_id):
    request = ListTranscodingTaskRequest()
    request.task_id = [task_id]
    
    try:
        response = client.list_transcoding_task(request)
        for task in response.task_array:
            print(f"任务ID: {task.task_id}, 状态: {task.status}")
            if task.status == "SUCCEEDED":
                print(f"输出文件: {task.output.object}")
            elif task.status == "FAILED":
                print(f"失败原因: {task.error_code}")
    except exceptions.ClientRequestException as e:
        print(f"查询转码任务失败: {e}")

5.2 Java SDK

5.2.1 初始化客户端

import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.mpc.v1.MpcClient;

public class MpcClientExample {
    
    public static MpcClient initMpcClient() {
        HttpConfig httpConfig = HttpConfig.getDefaultHttpConfig()
            .withIgnoreSSLVerification(true)
            .withTimeout(3);
        
        String ak = System.getenv("SDK_AK");
        String sk = System.getenv("SDK_SK");
        String projectId = System.getenv("PROJECT_ID");
        String endpoint = "https://mpc.cn-north-4.myhuaweicloud.com";
        
        BasicCredentials auth = new BasicCredentials()
            .withAk(ak)
            .withSk(sk)
            .withProjectId(projectId);
        
        return MpcClient.newBuilder()
            .withHttpConfig(httpConfig)
            .withCredential(auth)
            .withEndpoint(endpoint)
            .build();
    }
}

5.2.2 创建转码模板

import com.huaweicloud.sdk.mpc.v1.model.*;

public void createTransTemplate() {
    MpcClient client = initMpcClient();
    
    CreateTransTemplateRequest request = new CreateTransTemplateRequest();
    
    TransTemplate body = new TransTemplate();
    body.setTemplateName("Java_SDK_MP4_1920x1080");
    
    Video video = new Video();
    video.setCodec(1);
    video.setBitrate(6000);
    video.setWidth(1920);
    video.setHeight(1080);
    video.setFrameRate(1);
    body.setVideo(video);
    
    Audio audio = new Audio();
    audio.setCodec(1);
    audio.setBitrate(128);
    audio.setSampleRate(4);
    audio.setChannels(2);
    body.setAudio(audio);
    
    Common common = new Common();
    common.setPvc(0);
    common.setHlsInterval(5);
    common.setPackType(1);
    body.setCommon(common);
    
    request.setBody(body);
    
    try {
        CreateTransTemplateResponse response = client.createTransTemplate(request);
        System.out.println("转码模板创建成功,模板ID: " + response.getTemplateId());
    } catch (Exception e) {
        System.out.println("创建转码模板失败: " + e.getMessage());
    }
}

6. 核心功能详解

6.1 转码模板配置

MPC提供了丰富的转码模板配置选项,用户可以根据业务需求灵活配置。

视频参数:包括编码格式(H.264/H.265等)、码率、分辨率、帧率、编码档次(profile)、编码级别(level)等。对于H.264编码,profile可选baseline、main、high等不同档次,level决定了最大分辨率、码率等参数的上限。

音频参数:包括编码格式(AAC/MP3等)、采样率、码率、声道数等。

通用参数:包括PVC(是否开启高清低码)、HLS切片间隔、DASH切片间隔、封装格式等。

6.2 高清低码

MPC的高清低码功能通过感知编码技术,分析视频中的场景、动作、内容和纹理,在保证视频画质的前提下实现更低的码率和带宽消耗。开启高清低码后,可以在同等画质下将视频码率降低30%-50%,有效节省存储空间和带宽成本。

6.3 视频截图

MPC支持两种截图方式:

  • 转码过程中截图:在提交转码任务时配置截图参数,转码的同时完成截图。
  • 独立截图:单独调用截图接口,仅对源视频进行截图而不转码。

截图类型支持指定时间点截图(DOTS类型)和固定时间间隔截图(TIME类型)。截图格式支持JPG、PNG等常见图片格式。

6.4 水印添加

MPC支持在转码过程中为视频添加图片水印。水印模板支持配置以下参数:

  • 水印类型:目前支持Image类型(图片水印)。
  • 水印尺寸:通过width和height参数设置水印的宽度和高度。
  • 水印位置:通过referpos参数设置水印在视频中的位置(如TopLeft、TopRight、BottomLeft、BottomRight等)。
  • 水印偏移:通过dx和dy参数设置水印相对于参考位置的水平和垂直偏移量。
  • 水印处理方式:通过image_process参数设置图片处理方式(如Grayed表示灰度处理)。
  • 水印显示时间:通过timeline_start和timeline_duration参数设置水印开始显示的时间和持续时长。

6.5 转封装

转封装功能可以在不改变音视频编码格式和参数的情况下,转换文件的封装格式。支持的输入格式包括MP3、MP4、FLV、TS,输出格式包括HLS和MP4。转封装适用于需要改变文件容器格式但不需要重新编码的场景,处理速度快且不损失画质。

7. 常见问题与排查

7.1 转码失败常见原因

转码失败时,界面会输出报错提示。常见的失败原因包括:

  • 编码格式不支持:源文件的编码格式不在MPC支持的格式列表中。支持转码的视频编码格式包括H.264、H.265、MPEG-2、MPEG-4、MJPEG、VP6/7/8/9、WMV1/2/3、ProRes 422等。
  • 跨区域处理:MPC服务与OBS桶不在同一区域。
  • OBS桶未授权:未将OBS桶授权给MPC服务访问。
  • 字幕文件问题:字幕格式不符合要求(需为SRT格式)、字幕路径不正确或字幕文件不存在。
  • 音频采样率过低:音频采样率低于12000Hz时可能被丢弃。

7.2 视频转码后只有音频没有画面

这种情况通常是由于转码模板中选择了音频封装格式或勾选了“禁用视频”选项。排查方法:

  • 在“媒体处理 > 转码”的任务列表中检查转码模板是否为音频模板。
  • 在“全局设置”中查看转码模板是否有勾选“禁用视频”。

7.3 MP3转封装MP4失败

可能原因是片源存在问题,目前仅支持采样率大于8000Hz的MP3文件转封装为MP4格式。

8. 计费说明与成本优化

8.1 计费项

MPC服务的费用包含转码费用、转封装费用、转推费用和截图费用。具体价格说明请参见MPC产品价格详情。

转码费用:按输出文件的时长计费。不同编码标准、分辨率、是否开启高清低码对应不同的单价。例如H.264标准转码或高清低码的费用都按照H.264 SD的可用时长进行计费。

一进多出模板计费:使用一进多出模板进行视频转码时,费用是多个输出视频的转码费用总和。

8.2 成本优化建议

  • 合理选择存储类型:根据业务需求选择合适的热存储、冷存储类型,降低存储成本。
  • 开启高清低码:在保证画质的前提下降低码率,减少带宽和存储成本。
  • 按需使用:MPC支持按需计费模式,根据实际使用量付费,避免资源浪费。
  • 使用价格计算器:通过MPC提供的价格计算器,根据业务诉求快速计算出参考价格。

9. 最佳实践

9.1 视频点播平台构建

MPC可以与OBS、CDN等服务组合,构建完整的视频点播平台。推荐架构如下:

  • 使用OBS存储原始视频文件和转码输出文件。
  • 使用MPC对视频进行转码,生成适应不同终端的多码率版本。
  • 使用CDN加速视频分发,提升用户播放体验。
  • 使用不同的桶隔离原始文件和输出文件,便于管理和权限控制。

9.2 自动化媒体处理

结合函数工作流FunctionGraph和OBS触发器,可以实现自动化的媒体处理流程。当OBS桶收到上传的视频后,自动触发FunctionGraph函数调用MPC接口创建转码任务,实现无人值守的自动化处理。

10. 总结

华为云媒体处理MPC是一项功能强大、易于使用的音视频处理服务。通过本文的介绍,相信读者已经掌握了MPC的基本概念、服务开通流程、控制台操作方法、API调用方式以及SDK开发技巧。无论是通过控制台进行简单的视频转码,还是通过API/SDK将MPC集成到复杂的业务系统中,MPC都能提供高效、稳定的媒体处理能力。

在实际使用过程中,建议先通过控制台熟悉MPC的各项功能,然后再根据业务需求选择合适的集成方式。对于需要自动化、批量处理的场景,推荐使用API或SDK方式进行集成。同时,合理配置转码参数、开启高清低码功能、选择合适的计费模式,可以有效控制成本,实现业务价值最大化。


常见问题解答

问1:MPC服务与OBS桶必须在同一区域吗?

是的。MPC不支持处理跨区域的媒资文件,MPC服务与OBS桶必须在同一区域。例如使用华北-北京四的MPC服务,只能处理华北-北京四OBS桶中的视频文件。

问2:如何获取项目ID和Endpoint?

项目ID可以在华为云控制台的“我的凭证 > API凭证”页面查看。Endpoint可以从地区和终端节点页面获取。

问3:MPC支持哪些输入视频编码格式?

MPC支持转码的视频编码格式包括H.264、H.265、MPEG-2、MPEG-4、MJPEG、VP6/7/8/9、WMV1/2/3、ProRes 422等。若源文件的编码格式不在支持列表中,会出现转码失败。

问4:转码任务失败如何排查?

转码失败时,界面会输出报错提示。常见原因包括编码格式不支持、跨区域处理、OBS桶未授权、字幕文件问题等。可以根据错误提示进行针对性排查,或联系华为工程师解决。

问5:MPC的转码费用如何计算?

MPC的转码费用按输出文件的时长计费。不同编码标准、分辨率、是否开启高清低码对应不同的单价。使用一进多出模板时,费用是多个输出视频的转码费用总和。具体价格请参见MPC产品价格详情。

问6:MPC支持哪些编程语言的SDK?

MPC目前支持Java、Python和Go三种语言的SDK。如果使用其他开发语言,可以通过MPC的REST API进行调用。

相关文章

2024年华为云代理返点返佣政策:携手共进,共创云端辉煌

2024年华为云代理返点返佣政策:携手共进,共创云端辉煌

随着云计算市场的不断扩大和竞争的日益激烈,华为云作为国内领先的云服务提供商,始终致力于与合作伙伴共同推动产业的进步。为了更好地满足市场需求,提高市场份额,华为云在2024年对代理返点返佣政策进行了全面…

华为云服务器购买怎么便宜?小公司省钱攻略来了!这样买立省好几千​

华为云服务器购买怎么便宜?小公司省钱攻略来了!这样买立省好几千​

很多朋友都在吐槽:“华为云服务器太贵了,预算有限实在买不起!” 其实,买华为云服务器贵不贵,关键看你会不会选、会不会买。今天就来给大家分享一套超实用的省钱攻略,小公司、创业团队也能轻松用得起稳定又安全…

华为云服务器采购总嫌贵?30%华为云返点返佣 + 旗舰级代理保障,这波省钱操作别错过!

华为云服务器采购总嫌贵?30%华为云返点返佣 + 旗舰级代理保障,这波省钱操作别错过!

最近不少做 IT 运维或企业采购的朋友跟我吐槽,公司要上华为云服务器,去官网一看报价直接犯了难 —— 按年付费算下来,比预期预算高出不少。要是赶上业务扩张需要多台服务器,这笔开支更是让财务部门直皱眉。…

2026华为云返点返佣政策深度解析:头部代理返佣优势与企业合作指南

2026华为云返点返佣政策深度解析:头部代理返佣优势与企业合作指南

上海汪远信息科技有限所在公司年销华为云产品3亿+,属于头部代理梯队,可为合作客户提供最高30%的返佣优惠,直接帮助企业降低30%的云资源成本。…

华为云代理商有哪些?华为云代理返点是真的么?

华为云代理商有哪些?华为云代理返点是真的么?

一,华为云代理商简介华为云代理商,顾名思义就是替华为云做华为云服务器数据库等公有云产品推广的代理商,每推广出一单华为云服务器,华为云会跟这个代理商结算佣金,佣金比例分为月度佣金,季度佣金和年度佣金,华…

2026华为云返点返佣政策深度解析:头部代理返佣优势与企业合作指南

2026华为云返点返佣政策深度解析:头部代理返佣优势与企业合作指南

一、华为云代理商的核心价值定位1. 代理商的角色与职责华为云代理商作为华为云生态的核心合作伙伴,承担着三重核心职能:•产品推广销售:负责推广销售华为云全系列云产品,包括云服务器ECS、云数据…