You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Transcoder Pub/Sub作业更新通知消息无法解析问题咨询

问题根因

谷歌云转码服务的Pub/Sub作业更新通知的data字段设计为UTF-8编码的JSON字符串,并非Protobuf二进制序列化结果,你直接将字节流传入Protobuf二进制反序列化方法,自然会抛出InvalidProtocolBufferException异常。

正确解析方案

你推测的消息结构类型是正确的,data里嵌套的job字段完全匹配google.cloud.video.transcoder.v1beta1.Job的定义,只需要调整解析方式即可:

  • 第一步:将PubsubMessage的data字节数组按UTF-8编码解码为字符串
  • 第二步:根据你的业务需求选择对应解析方式:
    • 仅需提取少量字段:直接用任意通用JSON库解析字符串,提取job下的对应字段即可
    • 需要转换为Job Protobuf对象:使用Protobuf官方提供的JSON解析工具,将job字段对应的JSON字符串反序列化为目标对象,不要使用Protobuf二进制反序列化API

参考示例(Java语言)

import java.nio.charset.StandardCharsets;
import com.google.protobuf.util.JsonFormat;
import com.google.cloud.video.transcoder.v1beta1.Job;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

// 从Pub/Sub消息中获取data字节数组并转成JSON字符串
String pubsubDataStr = new String(pubsubMessage.getData(), StandardCharsets.UTF_8);

// 提取内层job对应的JSON片段
JsonObject pubsubJson = JsonParser.parseString(pubsubDataStr).getAsJsonObject();
String jobJson = pubsubJson.getAsJsonObject("job").toString();

// 用Protobuf JSON解析器转换为Job对象
Job.Builder jobBuilder = Job.newBuilder();
JsonFormat.parser().ignoringUnknownFields().merge(jobJson, jobBuilder);
Job transcoderJob = jobBuilder.build();

内容的提问来源于stack exchange,提问作者TJ Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:06:03