腾讯云VOD AIGC视频生成工具 回调实现

腾讯云VOD AIGC视频生成工具 回调实现

腾讯云VOD AIGC视频生成工具

一个功能完整的腾讯云VOD AIGC视频生成工具库,支持轮询模式回调模式两种获取结果方式。

目录结构

test/vod/ ├── tencent_aigc_video.py # 核心库:API封装、任务管理 ├── config.py # 配置文件:从项目config.yaml读取凭证 ├── examples.py # 使用示例:各种生成场景 ├── callback_demo.py # 回调演示:带SessionContext的任务创建 ├── setup_callback.py # 回调配置:设置/查询回调URL └── README.md # 本文档 

快速开始

1. 配置凭证

确保项目根目录的 config.yaml 包含腾讯云VOD凭证:

secret_id:tencent_vod:"AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxx"secret_key:tencent_vod:"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

或设置环境变量:

exportTENCENTCLOUD_SECRET_ID="AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxx"exportTENCENTCLOUD_SECRET_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"exportTENCENTCLOUD_SUB_APP_ID="1234567890"

2. 验证配置

cd /opt/xj_ai_suanfa/AIGC_INTERFACE_HSC/test/vod python config.py 

输出示例:

腾讯云VOD配置状态: secret_id: AKIDxxxx...xxxx secret_key: ******************** sub_app_id: 1234567890 状态: ✓ 配置完整 

方式一:轮询模式(同步等待)

适用场景:单任务测试、简单脚本、需要立即获取结果

基本用法

from tencent_aigc_video import AIGCVideoGenerator, AIGCModel # 创建生成器 generator = AIGCVideoGenerator()# 生成视频(同步等待,默认超时600秒) result = generator.generate_video( prompt="一只橘猫在阳光下打哈欠,毛发随风轻轻飘动", model=AIGCModel.GV, model_version="3.1-fast", aspect_ratio="16:9", timeout=600)# 获取结果print(f"任务ID: {result['task_id']}")print(f"状态: {result['status']}")print(f"视频URL: {result['video_urls']}")

高级用法(精细控制)

from tencent_aigc_video import AIGCVideoManager, AIGCModel, TencentVODConfig # 创建配置和管理器 config = TencentVODConfig.from_env() manager = AIGCVideoManager(config)# 创建任务 task = manager.create_video_task( model=AIGCModel.GV, model_version="3.1-fast", prompt="海上日落,金色阳光洒在波光粼粼的海面上", output_config={"StorageMode":"Temporary",# 临时存储,7天有效"AspectRatio":"16:9"})print(f"任务已创建: {task.task_id}")# 自定义进度回调defprogress_callback(t): status_map ={"WAIT":"等待中","RUN":"生成中","DONE":"完成","FAIL":"失败"}print(f" 状态: {status_map.get(t.status.value, t.status.value)}")# 等待完成 completed = manager.wait_for_completion( task, timeout=600, poll_interval=10,# 每10秒查询一次 progress_callback=progress_callback )# 获取结果if completed.video_urls:print(f"视频URL: {completed.video_urls[0]}")

运行示例

python examples.py # 选择 1-7 测试不同功能

方式二:回调模式(异步通知)

适用场景:批量任务、生产环境、无需阻塞等待

原理

┌─────────────┐ 1.创建任务 ┌─────────────────┐ │ 你的代码 │ ───────────────→ │ 腾讯云VOD API │ └─────────────┘ (立即返回) └────────┬────────┘ │ 2.后台生成 ↓ ┌─────────────┐ 3.HTTP POST ┌─────────────────┐ │ 你的回调服务 │ ←──────────────── │ 腾讯云回调服务 │ └─────────────┘ (任务完成时) └─────────────────┘ 

步骤1:配置回调URL(一次性)

方法A:使用工具脚本
# 查询当前配置 python setup_callback.py query # 设置回调URL python setup_callback.py set"https://your-server.com/vod/callback"
方法B:代码配置
from tencent_aigc_video import TencentVODClient, TencentVODConfig config = TencentVODConfig.from_env() client = TencentVODClient(config)# 设置回调 params ={"SubAppId": config.sub_app_id,"Mode":"PUSH","NotificationUrl":"https://your-server.com/vod/callback","UploadMediaCompleteEventSwitch":"ON","DeleteMediaCompleteEventSwitch":"ON"} client._make_request("ModifyEventConfig", params)

步骤2:创建任务

from tencent_aigc_video import AIGCVideoManager, AIGCModel, TencentVODConfig import json import uuid from datetime import datetime config = TencentVODConfig.from_env() manager = AIGCVideoManager(config)# 生成业务ID business_id =f"order_{uuid.uuid4().hex[:8]}"# SessionContext:透传业务信息,回调时原样返回 session_context = json.dumps({"business_id": business_id,"user_id":"user_123","created_at": datetime.now().isoformat()}, ensure_ascii=False)# 创建任务(立即返回,不阻塞) task = manager.create_video_task( model=AIGCModel.GV, model_version="3.1-fast", prompt="一只橘猫在阳光下打哈欠", output_config={"StorageMode":"Temporary","AspectRatio":"16:9"}, session_id=business_id,# 去重ID session_context=session_context # 透传信息)print(f"任务已提交: {task.task_id}")print(f"业务ID: {business_id}")# 不需要等待,回调会自动发送

步骤3:接收回调

回调数据示例
{"EventType":"AigcVideoTaskComplete","AigcVideoTaskCompleteEvent":{"TaskId":"1234567890-AigcVideoTask-xxxxxxxxxxxx","Status":"FINISH","Progress":100,"Input":{"Prompt":"一只橘猫在阳光下打哈欠","ModelName":"GV","ModelVersion":"3.1-fast"},"Output":{"FileInfos":[{"FileUrl":"http://xxx.vod2.myqcloud.com/.../aigcVideoGenFile.mp4","ExpireTime":"2026-01-13T01:50:26Z"}]},"SessionContext":"{\"business_id\": \"order_abc123\", \"user_id\": \"user_123\"}","SessionId":"order_abc123"}}
回调处理示例(FastAPI)
from fastapi import FastAPI, Request import json app = FastAPI()@app.post("/vod/callback")asyncdefvod_callback(request: Request): data =await request.json() event_type = data.get("EventType")if event_type =="AigcVideoTaskComplete": event = data["AigcVideoTaskCompleteEvent"]# 解析透传的业务信息 ctx = json.loads(event.get("SessionContext","{}")) business_id = ctx.get("business_id") user_id = ctx.get("user_id")# 获取结果 status = event["Status"]if status =="FINISH": video_url = event["Output"]["FileInfos"][0]["FileUrl"]# 更新数据库、通知用户等print(f"任务完成: {business_id}, 视频: {video_url}")else: error_msg = event.get("Message","未知错误")print(f"任务失败: {business_id}, 错误: {error_msg}")return{"code":0,"message":"success"}

两种方式对比

特性轮询模式回调模式
代码复杂度简单需要回调服务
获取结果同步阻塞异步通知
API调用次数N次(轮询)0次
适用场景单任务/测试批量/生产
资源占用阻塞线程无阻塞
额外配置NotificationUrl

支持的模型

模型文生视频(T2V)图生视频(I2V)首尾帧多图输入
GV (Google Veo)
KLING (可灵)✓ (2.1+)
HUNYUAN (混元)
HAILUO (海螺)
VIDU✓ (q2-pro)✓ (1-7张)
JIMENG (即梦)
OS (OpenAI Sora)
MINGMOU (明眸)
SEEDANCE部分

常见问题

Q: 回调配置后,原来的轮询代码还能用吗?

A: 可以!两种方式互不影响。配置回调后,任务完成时会同时:

  • 轮询代码正常返回结果
  • 腾讯云发送回调到配置的URL

Q: SessionContext 是必须的吗?

A: 不是。不传也会收到回调,只是回调里 SessionContext 字段为空。

Q: 视频URL有效期多久?

A: StorageMode: Temporary 为7天,StorageMode: Persist 为永久(需要开通存储)。

Q: 如何测试回调?

A: 使用 https://webhook.site 获取临时URL测试。


API文档

Read more

企业级web药店管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

企业级web药店管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着医药行业的快速发展,传统药店管理模式在效率、数据整合及用户体验方面逐渐显现出不足。人工管理药品库存、销售记录和客户信息不仅耗时耗力,还容易出现人为错误,影响药店运营效率和服务质量。信息化管理系统的引入成为解决这一问题的有效途径,能够实现药品信息的精准管理、销售数据的实时分析以及客户服务的智能化。基于此,开发一套高效、稳定且易用的企业级Web药店管理系统具有重要的现实意义。该系统能够帮助药店实现数字化转型,提升管理效率,降低运营成本,同时为顾客提供更便捷的购药体验。关键词:药店管理系统、数字化转型、药品库存管理、销售数据分析、客户服务。 本系统采用SpringBoot作为后端框架,结合Vue.js前端框架和MyBatis持久层框架,构建了一个高性能、易扩展的全栈Web应用。数据库选用MySQL,确保数据存储的稳定性和高效查询能力。系统主要功能包括药品信息管理、库存预警、销售记录统计、会员管理以及多角色权限控制。管理员可通过可视化界面实时监控药品库存状态,自动生成销售报表,优化采购决策;店员能够快速完成药品销售与退换货操作;顾客则可通过会员系统享受个性化服务。系统采用REST

前端 HTML/CSS 核心知识点总结(定位、层级、透明、交互、布局)

在前端开发中,HTML 和 CSS 是构建页面结构与样式的基础,掌握核心的布局、交互、样式控制知识点能大幅提升页面开发效率。本文基于实际代码案例,总结定位、层级、透明效果、表单交互、轮播图、元素居中、Tab 栏切换等高频知识点,助力开发者夯实基础。 一、定位与层级(z-index) 定位是 CSS 布局的核心,z-index则用于控制定位元素的显示层级,二者结合可实现复杂的层叠布局。 1. 定位元素的层级规则 * z-index仅对开启定位(position: relative/absolute/fixed/sticky) 的元素生效,未定位元素无法使用。 * 层级值为正整数,值越高元素越优先显示;默认层级为 0,层级相同时,文档流中下方的元素会盖住上方元素。 * 核心特性:父元素层级再高,也不会盖住其子元素(子元素始终在父元素的层叠上下文中)。 2. 代码示例 .box1 { width:

前端实现Word文档在线编辑与导出:基于mammoth.js与Blob对象的完整解决方案

如何在浏览器中直接编辑Word文档并导出?本文将深入探索一种基于mammoth.js和Blob对象的完整技术方案。 在当今的Web应用开发中,实现文档的在线编辑与导出已成为常见需求。无论是企业内部系统、教育平台还是项目管理工具,都迫切需要让用户能够在浏览器中直接编辑Word文档,而无需安装桌面软件。本文将详细介绍如何利用mammoth.js和Blob对象实现这一功能,并对比其他可行方案。 一、为什么选择mammoth.js与Blob方案? 在Web前端实现Word文档处理,主要有三种主流方案:浏览器原生Blob导出、mammoth.js专业转换和基于模板的docxtemplater方案。它们各有优劣,适用于不同场景。 mammoth.js的核心优势在于它能将.docx文档转换为语义化的HTML,而非简单复制视觉样式。这意味着它生成的HTML结构清晰、易于维护和样式定制。配合Blob对象,我们可以轻松将编辑后的内容重新导出为Word文档。 与直接使用Microsoft Office Online或Google Docs嵌入相比,mammoth.js方案不依赖外部服务,能更好地

3分钟体验macOS Web:无需苹果设备的在线系统模拟器

3分钟体验macOS Web:无需苹果设备的在线系统模拟器 【免费下载链接】macos-web 项目地址: https://gitcode.com/gh_mirrors/ma/macos-web 想要体验macOS的优雅界面却苦于没有苹果设备?macOS Web为你带来了完美的解决方案!这是一个基于现代Web技术构建的开源项目,让你在浏览器中就能感受到macOS Ventura的桌面体验。🎯 项目概览 macOS Web是由开发者PuruVJ创建的创新项目,它使用Svelte框架和Vite构建工具,将macOS的桌面环境完整地呈现在网页上。从菜单栏到Dock栏,从窗口管理到应用程序启动,每一个细节都精心设计,力求还原真实的macOS操作体验。 核心功能详解 完整的桌面环境 项目提供了完整的macOS桌面模拟,包括: * 菜单栏:包含苹果菜单、应用程序菜单和系统状态区域 * Dock栏:可自定义的应用程序启动器 * 窗口系统:支持窗口拖拽、最小化、最大化等操作 * 应用程序:内置多种模拟应用,如计算器、日历、VSCode等 丰富的应用程序 根据src