/* * Copyright silenceper/wechat Author(https://silenceper.com/wechat/). All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * You can obtain one at https://github.com/silenceper/wechat. * */ package minidrama import ( "github.com/silenceper/wechat/v2/miniprogram/context" "github.com/silenceper/wechat/v2/util" ) // MiniDrama mini program entertainment live broadcast related type MiniDrama struct { ctx *context.Context } // ErrCode error code type ErrCode int // SingleFileUploadRequest 单文件上传请求 // Content-Type 需要指定为 multipart/form-data; boundary= // <箭头括号> 表示必须替换为有效值的变量。 // 不填写 cover_type,cover_data 字段时默认截取视频首帧作为视频封面。 type SingleFileUploadRequest struct { MediaName string `json:"media_name"` // 媒体文件名称 文件名,需按照“剧目名 - 对应剧集数”格式命名文件,示例值:"我的演艺 - 第 1 集"。 MediaType string `json:"media_type"` // 媒体文件类型 视频格式,支持:MP4,TS,MOV,MXF,MPG,FLV,WMV,AVI,M4V,F4V,MPEG,3GP,ASF,MKV,示例值:"MP4"。 MediaData []byte `json:"media_data"` // 媒体文件数据 视频文件内容,二进制。 CoverType string `json:"cover_type,omitempty"` // 视频封面图片格式,支持:JPG、JPEG、PNG、BMP、TIFF、AI、CDR、EPS、TIF,示例值:"JPG"。 CoverData []byte `json:"cover_data,omitempty"` // 视频封面图片内容,二进制。 SourceContext string `json:"source_context,omitempty"` // 来源上下文,会在上传完成事件中透传给开发者。 } // SingleFileUploadResponse 单文件上传响应 type SingleFileUploadResponse struct { util.CommonError MediaID int64 `json:"media_id"` // 媒体文件唯一标识,用于发布视频。 } // PullUploadRequest 拉取上传请求 // 不填写 cover_url 字段时默认截取视频首帧作为封面。 // Content-Type 需要指定为 application/json // 该接口为异步接口,上传完成会推送上传完成事件到开发者服务器,开发者也可以调用"查询任务"接口来轮询上传结果。 type PullUploadRequest struct { MediaName string `json:"media_name"` // 媒体文件名称 文件名,需按照“剧目名 - 对应剧集数”格式命名文件,示例值:"我的演艺 - 第 1 集"。 MediaURL string `json:"media_url"` // 视频 URL,示例值:"https://developers.weixin.qq.com/test.mp4"。 CoverURL string `json:"cover_url,omitempty"` // 视频封面 URL,示例值:"https://developers.weixin.qq.com/test.jpg"。 SourceContext string `json:"source_context,omitempty"` // 来源上下文,会在上传完成事件中透传给开发者。 } // PullUploadResponse 拉取上传响应 type PullUploadResponse struct { util.CommonError TaskID int64 `json:"task_id"` // 任务 ID,用于查询拉取上传任务的结果。 } // GetTaskRequest 查询任务请求 // 该接口用于查询拉取上传的任务状态。 // Content-Type 需要指定为 application/json。 type GetTaskRequest struct { TaskID int64 `json:"task_id"` // 任务 ID,用于查询拉取上传任务的结果。 } // GetTaskResponse 查询任务响应 type GetTaskResponse struct { util.CommonError TaskInfo TaskInfo `json:"task_info"` // 任务信息。 } // TaskInfo 任务信息 type TaskInfo struct { ID int64 `json:"id"` // 任务 ID。 TaskType int `json:"task_type"` // 任务类型,1:拉取上传任务。 Status int `json:"status"` // 任务状态枚举值:1. 等待中;2. 正在处理;3. 已完成;4. 失败。 ErrCode int `json:"errcode"` // 任务错误码,0 表示成功,其它表示失败。 ErrMsg string `json:"errmsg"` // 任务错误原因。 CreateTime int64 `json:"create_time"` // 任务创建时间,时间戳,单位:秒。 FinishTime int64 `json:"finish_time"` // 任务完成时间,时间戳,单位:秒。 MediaID int64 `json:"media_id"` // 媒体文件唯一标识,用于发布视频。 } // ApplyUploadRequest 申请上传请求 // 上传大文件时需使用分片上传方式,分为 3 个步骤: // // 申请分片上传,确定文件名、格式类型,返回 upload_id,唯一标识本次分片上传。 // 上传分片,多次调用上传文件分片,需要携带 part_number 和 upload_id,其中 part_number 为分片的编号,支持乱序上传。当传入 part_number 和 upload_id 都相同的时候,后发起上传请求的分片将覆盖之前的分片。 // 确认分片上传,当上传完所有分片后,需要完成整个文件的合并。请求体中需要给出每一个分片的 part_number 和 etag,用来校验分片的准确性,最后返回文件的 media_id。 // 如果填写了 cover_type,表明本次分片上传除上传媒体文件外还需要上传封面图片,不填写 cover_type 则默认截取视频首帧作为封面。 // Content-Type 需要指定为 application/json。 type ApplyUploadRequest struct { MediaName string `json:"media_name"` // 媒体文件名称 文件名,需按照“剧目名 - 对应剧集数”格式命名文件,示例值:"我的演艺 - 第 1 集"。 MediaType string `json:"media_type"` // 媒体文件类型 视频格式,支持:MP4,TS,MOV,MXF,MPG,FLV,WMV,AVI,M4V,F4V,MPEG,3GP,ASF,MKV,示例值:"MP4"。 CoverType string `json:"cover_type,omitempty"` // 视频封面图片格式,支持:JPG、JPEG、PNG、BMP、TIFF、AI、CDR、EPS、TIF,示例值:"JPG"。 SourceContext string `json:"source_context,omitempty"` // 来源上下文,会在上传完成事件中透传给开发者。 } // ApplyUploadResponse 申请上传响应 type ApplyUploadResponse struct { util.CommonError UploadID string `json:"upload_id"` // 本次分片上传的唯一标识。 } // UploadPartRequest 上传分片请求 // 将文件的其中一个分片上传到平台,最多支持 100 个分片,每个分片大小为 5MB,最后一个分片可以小于 5MB。该接口适用于视频和封面图片。视频最大支持 500MB,封面图片最大支持 10MB。 // 调用该接口之前必须先调用申请分片上传接口。 // 在申请分片上传时,如果不填写 cover_type,则默认截取视频首帧作为封面。 // Content-Type 需要指定为 multipart/form-data; boundary=,<箭头括号>表示必须替换为有效值的变量。 // part_number 从 1 开始。如除了上传视频外还需要上传封面图片,则封面图片的 part_number 需重新从 1 开始编号。 type UploadPartRequest struct { UploadID string `json:"upload_id"` // 一次分片上传的唯一标识,由申请分片上传接口返回。 PartNumber int `json:"part_number"` // 本次上传的分片的编号,范围在 1 - 100。 ResourceType int `json:"resource_type"` // 指定该分片属于视频还是封面图片的枚举值:1. 视频,2. 封面图片。 Data []byte `json:"data"` // 分片内容,二进制。 } // UploadPartResponse 上传分片响应 type UploadPartResponse struct { util.CommonError ETag string `json:"etag"` // 上传分片成功后返回的分片标识,用于后续确认分片上传接口。 } // CommitUploadRequest 确认分片上传请求 // 该接口用于完成整个分片上传流程,合并所有文件分片,确认媒体文件(和封面图片文件)上传到平台的结果,返回文件的 ID。请求中需要给出每一个分片的 part_number 和 etag,用来校验分片的准确性。 // 注意事项 // Content-Type 需要指定为 application/json。 // 调用该接口之前必须先调用申请分片上传接口以及上传分片接口。 // 如本次分片上传除上传媒体文件外还需要上传封面图片,则请求中还需提供 cover_part_infos 字段以用于合并封面图片文件分片。 // 请求中 media_part_infos 和 cover_part_infos 字段必须按 part_number 从小到大排序,part_number 必须从 1 开始,连续且不重复。 type CommitUploadRequest struct { UploadID string `json:"upload_id"` MediaPartInfos []*PartInfo `json:"media_part_infos"` CoverPartInfos []*PartInfo `json:"cover_part_infos,omitempty"` } // PartInfo 分片信息 type PartInfo struct { PartNumber int `json:"part_number"` // 分片编号。 Etag string `json:"etag"` // 使用上传分片接口上传成功后返回的 etag 的值 } // CommitUploadResponse 确认分片上传响应 type CommitUploadResponse struct { util.CommonError MediaID int64 `json:"media_id"` // 媒体文件唯一标识,用于发布视频。 } // ListMediaRequest 查询媒体列表请求 // 该接口用于查询已经上传到平台的媒体文件列表。 // 注意事项 // Content-Type 需要指定为 application/json。 // 本接口返回的视频或图片链接均为临时链接,不应将其保存下来。 // media_name 参数支持模糊匹配,当需要模糊匹配时可以在前面或后面加上 %,否则为精确匹配。例如 "test%" 可以匹配到 "test123", "testxxx", "test"。 // 调用方式 type ListMediaRequest struct { DramaID int64 `json:"drama_id,omitempty"` // 剧目 ID,可通过查询剧目列表接口获取。 MediaName string `json:"media_name,omitempty"` // 媒体文件名称,可通过查询媒体列表接口获取,模糊匹配。 StartTime int64 `json:"start_time,omitempty"` // 媒资上传时间>=start_time,Unix 时间戳,单位:秒。 EndTime int64 `json:"end_time,omitempty"` // 媒资上传时间