Skip to content

Commit 0f16ea4

Browse files
committed
Merge branch 'dev-aigc' into 'master' (merge request !134)
新增aigc功能和文档任务ckafka回调
2 parents 5d0fa50 + 9fdfa6e commit 0f16ea4

File tree

9 files changed

+275
-60
lines changed

9 files changed

+275
-60
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,4 @@ example/CI/image_process/test*
3737
example/CI/doc_preview/test*
3838
example/CI/content_auditing/test*
3939
.vscode
40+
example/CI/image_process/deer.jpeg

ci.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -63,20 +63,21 @@ type PicImageInfo struct {
6363
Orientation int `xml:"Orientation,omitempty"`
6464
}
6565
type PicProcessObject struct {
66-
Key string `xml:"Key,omitempty"`
67-
Location string `xml:"Location,omitempty"`
68-
Format string `xml:"Format,omitempty"`
69-
Width int `xml:"Width,omitempty"`
70-
Height int `xml:"Height,omitempty"`
71-
Size int `xml:"Size,omitempty"`
72-
Quality int `xml:"Quality,omitempty"`
73-
ETag string `xml:"ETag,omitempty"`
74-
WatermarkStatus int `xml:"WatermarkStatus,omitempty"`
75-
CodeStatus int `xml:"CodeStatus,omitempty"`
76-
QRcodeInfo []QRcodeInfo `xml:"QRcodeInfo,omitempty"`
77-
FrameCount int `xml:"FrameCount,omitempty"`
78-
Md5 string `xml:"Md5,omitempty"`
79-
BitDepth int `xml:"BitDepth,omitempty"`
66+
Key string `xml:"Key,omitempty"`
67+
Location string `xml:"Location,omitempty"`
68+
Format string `xml:"Format,omitempty"`
69+
Width int `xml:"Width,omitempty"`
70+
Height int `xml:"Height,omitempty"`
71+
Size int `xml:"Size,omitempty"`
72+
Quality int `xml:"Quality,omitempty"`
73+
ETag string `xml:"ETag,omitempty"`
74+
WatermarkStatus int `xml:"WatermarkStatus,omitempty"`
75+
CodeStatus int `xml:"CodeStatus,omitempty"`
76+
QRcodeInfo []QRcodeInfo `xml:"QRcodeInfo,omitempty"`
77+
FrameCount int `xml:"FrameCount,omitempty"`
78+
Md5 string `xml:"Md5,omitempty"`
79+
BitDepth int `xml:"BitDepth,omitempty"`
80+
AIGCMetadata *AIGCMetadata `xml:"AIGCMetadata,omitempty"`
8081
}
8182
type QRcodeInfo struct {
8283
CodeUrl string `xml:"CodeUrl,omitempty"`

ci_doc.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ type DocProcessJobOperation struct {
5757
Output *DocProcessJobOutput `xml:"Output,omitempty"`
5858
DocProcess *DocProcessJobDocProcess `xml:"DocProcess,omitempty"`
5959
DocProcessResult *DocProcessJobDocProcessResult `xml:"DocProcessResult,omitempty"`
60+
UserData string `xml:"UserData,omitempty"`
6061
}
6162

6263
type DocProcessJobDetail struct {
@@ -72,11 +73,16 @@ type DocProcessJobDetail struct {
7273
}
7374

7475
type CreateDocProcessJobsOptions struct {
75-
XMLName xml.Name `xml:"Request"`
76-
Tag string `xml:"Tag,omitempty"`
77-
Input *DocProcessJobInput `xml:"Input,omitempty"`
78-
Operation *DocProcessJobOperation `xml:"Operation,omitempty"`
79-
QueueId string `xml:"QueueId,omitempty"`
76+
XMLName xml.Name `xml:"Request"`
77+
Tag string `xml:"Tag,omitempty"`
78+
Input *DocProcessJobInput `xml:"Input,omitempty"`
79+
Operation *DocProcessJobOperation `xml:"Operation,omitempty"`
80+
QueueId string `xml:"QueueId,omitempty"`
81+
CallBackFormat string `xml:"CallBackFormat,omitempty"`
82+
CallBackType string `xml:"CallBackType,omitempty"`
83+
CallBack string `xml:"CallBack,omitempty"`
84+
CallBackMqConfig *NotifyConfigCallBackMqConfig `xml:"CallBackMqConfig,omitempty"`
85+
CallBackKafkaConfig *KafkaConfig `xml:"CallBackKafkaConfig,omitempty"`
8086
}
8187

8288
type CreateDocProcessJobsResult struct {

ci_media.go

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -138,16 +138,17 @@ type TranscodeProAudio struct {
138138

139139
// TransConfig TODO
140140
type TransConfig struct {
141-
AdjDarMethod string `xml:"AdjDarMethod,omitempty"`
142-
IsCheckReso string `xml:"IsCheckReso,omitempty"`
143-
ResoAdjMethod string `xml:"ResoAdjMethod,omitempty"`
144-
IsCheckVideoBitrate string `xml:"IsCheckVideoBitrate,omitempty"`
145-
VideoBitrateAdjMethod string `xml:"VideoBitrateAdjMethod,omitempty"`
146-
IsCheckAudioBitrate string `xml:"IsCheckAudioBitrate,omitempty"`
147-
AudioBitrateAdjMethod string `xml:"AudioBitrateAdjMethod,omitempty"`
148-
DeleteMetadata string `xml:"DeleteMetadata,omitempty"`
149-
IsHdr2Sdr string `xml:"IsHdr2Sdr,omitempty"`
150-
HlsEncrypt *HlsEncrypt `xml:"HlsEncrypt,omitempty"`
141+
AdjDarMethod string `xml:"AdjDarMethod,omitempty"`
142+
IsCheckReso string `xml:"IsCheckReso,omitempty"`
143+
ResoAdjMethod string `xml:"ResoAdjMethod,omitempty"`
144+
IsCheckVideoBitrate string `xml:"IsCheckVideoBitrate,omitempty"`
145+
VideoBitrateAdjMethod string `xml:"VideoBitrateAdjMethod,omitempty"`
146+
IsCheckAudioBitrate string `xml:"IsCheckAudioBitrate,omitempty"`
147+
AudioBitrateAdjMethod string `xml:"AudioBitrateAdjMethod,omitempty"`
148+
DeleteMetadata string `xml:"DeleteMetadata,omitempty"`
149+
IsHdr2Sdr string `xml:"IsHdr2Sdr,omitempty"`
150+
HlsEncrypt *HlsEncrypt `xml:"HlsEncrypt,omitempty"`
151+
AIGCMetadata *AIGCMetadata `xml:"AIGCMetadata,omitempty"`
151152
}
152153

153154
// Transcode TODO
@@ -362,12 +363,13 @@ type HlsEncrypt struct {
362363

363364
// Segment TODO
364365
type Segment struct {
365-
Format string `xml:"Format,omitempty"`
366-
Duration string `xml:"Duration,omitempty"`
367-
TranscodeIndex string `xml:"TranscodeIndex,omitempty"`
368-
HlsEncrypt *HlsEncrypt `xml:"HlsEncrypt,omitempty"`
369-
StartTime string `xml:"StartTime,omitempty"`
370-
EndTime string `xml:"EndTime,omitempty"`
366+
Format string `xml:"Format,omitempty"`
367+
Duration string `xml:"Duration,omitempty"`
368+
TranscodeIndex string `xml:"TranscodeIndex,omitempty"`
369+
HlsEncrypt *HlsEncrypt `xml:"HlsEncrypt,omitempty"`
370+
StartTime string `xml:"StartTime,omitempty"`
371+
EndTime string `xml:"EndTime,omitempty"`
372+
AIGCMetadata *AIGCMetadata `xml:"AIGCMetadata,omitempty"`
371373
}
372374

373375
// VideoMontageVideo TODO
@@ -673,6 +675,16 @@ type PicProcess struct {
673675
ProcessRule string `xml:"ProcessRule,omitempty"`
674676
}
675677

678+
type AIGCMetadata struct {
679+
Label string `xml:"Label,omitempty"`
680+
ContentProducer string `xml:"ContentProducer,omitempty"`
681+
ProduceID string `xml:"ProduceID,omitempty"`
682+
ReservedCode1 string `xml:"ReservedCode1,omitempty"`
683+
ContentPropagator string `xml:"ContentPropagator,omitempty"`
684+
PropagateID string `xml:"PropagateID,omitempty"`
685+
ReservedCode2 string `xml:"ReservedCode2,omitempty"`
686+
}
687+
676688
// PicProcessResult TODO
677689
type PicProcessResult struct {
678690
UploadResult struct {
@@ -691,14 +703,15 @@ type PicProcessResult struct {
691703
} `xml:"OriginalInfo"`
692704
ProcessResults struct {
693705
Object struct {
694-
Key string `xml:"Key"`
695-
Location string `xml:"Location"`
696-
Format string `xml:"Format"`
697-
Width int32 `xml:"Width"`
698-
Height int32 `xml:"Height"`
699-
Size int32 `xml:"Size"`
700-
Quality int32 `xml:"Quality"`
701-
Etag string `xml:"Etag"`
706+
Key string `xml:"Key"`
707+
Location string `xml:"Location"`
708+
Format string `xml:"Format"`
709+
Width int32 `xml:"Width"`
710+
Height int32 `xml:"Height"`
711+
Size int32 `xml:"Size"`
712+
Quality int32 `xml:"Quality"`
713+
Etag string `xml:"Etag"`
714+
AIGCMetadata *AIGCMetadata `xml:"AIGCMetadata,omitempty"`
702715
} `xml:"Object"`
703716
} `xml:"ProcessResults"`
704717
} `xml:"UploadResult"`
@@ -2041,8 +2054,9 @@ type NodeSmartCover struct {
20412054

20422055
// NodeSegmentConfig TODO
20432056
type NodeSegmentConfig struct {
2044-
Format string `xml:"Format,omitempty"`
2045-
Duration string `xml:"Duration,omitempty"`
2057+
Format string `xml:"Format,omitempty"`
2058+
Duration string `xml:"Duration,omitempty"`
2059+
AIGCMetadata *AIGCMetadata `xml:"AIGCMetadata,omitempty"`
20462060
}
20472061

20482062
// NodeStreamPackConfigInfo TODO

example/CI/doc_preview/job.go

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ import (
1111
"github.com/tencentyun/cos-go-sdk-v5/debug"
1212
)
1313

14+
const (
15+
OutputBucket = "test-125000000"
16+
)
17+
1418
func log_status(err error) {
1519
if err == nil {
1620
return
@@ -30,7 +34,7 @@ func log_status(err error) {
3034
}
3135
}
3236

33-
func createDocJob() {
37+
func getClient() *cos.Client {
3438
u, _ := url.Parse("https://test-1234567890.cos.ap-chongqing.myqcloud.com")
3539
cu, _ := url.Parse("https://test-1234567890.ci.ap-chongqing.myqcloud.com")
3640
b := &cos.BaseURL{BucketURL: u, CIURL: cu}
@@ -47,17 +51,22 @@ func createDocJob() {
4751
},
4852
},
4953
})
54+
return c
55+
}
56+
57+
func createDocJob() {
58+
c := getClient()
5059

5160
createJobOpt := &cos.CreateDocProcessJobsOptions{
5261
Tag: "DocProcess",
5362
Input: &cos.DocProcessJobInput{
54-
Object: "input/doc_preview.ppt",
63+
Object: "abc.pptx",
5564
},
5665
Operation: &cos.DocProcessJobOperation{
5766
Output: &cos.DocProcessJobOutput{
5867
Region: "ap-chongqing",
59-
Object: "test-doc${Number}.png",
60-
Bucket: "test-1234567890",
68+
Object: "doc/test-doc${Number}.png",
69+
Bucket: OutputBucket,
6170
},
6271
DocProcess: &cos.DocProcessJobDocProcess{
6372
TgtType: "png",
@@ -66,16 +75,17 @@ func createDocJob() {
6675
ImageParams: "watermark/2/text/5paH5qGj6aKE6KeI/fontsize/20/gravity/NorthEast",
6776
},
6877
},
69-
QueueId: "p363fa5add7b94ca693f667a8d4807f54",
78+
CallBackFormat: "JSON",
79+
CallBackType: "Kafka",
80+
CallBackKafkaConfig: &cos.KafkaConfig{
81+
Region: "ap-chongqing",
82+
InstanceId: "ckafka-abc",
83+
Topic: "doc-test",
84+
},
7085
}
7186
createJobRes, _, err := c.CI.CreateDocProcessJobs(context.Background(), createJobOpt)
7287
log_status(err)
7388
fmt.Printf("%+v\n", createJobRes.JobsDetail)
74-
75-
// 5、DescribeDocProcessJob
76-
DescribeJobRes, _, err := c.CI.DescribeDocProcessJob(context.Background(), createJobRes.JobsDetail.JobId)
77-
log_status(err)
78-
fmt.Printf("%+v\n", DescribeJobRes.JobsDetail)
7989
}
8090

8191
func describeDocJob() {

example/CI/image_process/base_process.go

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"context"
5+
"encoding/base64"
56
"fmt"
67
"net/http"
78
"net/url"
@@ -1062,6 +1063,56 @@ func extractBlindWatermark3() {
10621063
}
10631064
}
10641065

1066+
1067+
// 文字水印和AIGC
1068+
func textWatermarkAndAIGC() {
1069+
rawurl := "https://test-12500000.cos.ap-chongqing.myqcloud.com"
1070+
1071+
aigcParam := make(map[string]string)
1072+
aigcParam["Label"] = "label"
1073+
aigcParam["ContentProducer"] = "contentProducer"
1074+
aigcParam["ProduceID"] = "ProduceID"
1075+
aigcParam["ReservedCode1"] = "ReservedCode1"
1076+
aigcParam["ContentPropagator"] = "ContentPropagator"
1077+
aigcParam["PropagateID"] = "PropagateID"
1078+
aigcParam["ReservedCode2"] = "ReservedCode2"
1079+
1080+
AIGCMetadata := "AIGCMetadata/"
1081+
for k, v := range aigcParam {
1082+
AIGCMetadata += k + "/" + base64.StdEncoding.EncodeToString([]byte(v)) + "/"
1083+
}
1084+
1085+
// 上传时处理
1086+
{
1087+
obj := "pic/textwatermark/deer.jpg"
1088+
filepath := "./deer.jpeg"
1089+
pic := &cos.PicOperations{
1090+
IsPicInfo: 1,
1091+
Rules: []cos.PicOperationsRules{
1092+
{
1093+
FileId: "textwatermark.jpg",
1094+
Rule: "imageMogr2/" + AIGCMetadata + "|watermark/2/text/6IW-6K6v5LqRwrfkuIfosaHkvJjlm74/fill/IzNEM0QzRA/fontsize/20/dissolve/50/gravity/northeast/dx/20/dy/20/batch/1/degree/45",
1095+
},
1096+
},
1097+
}
1098+
processWhenUpload(context.Background(), rawurl, obj, filepath, pic)
1099+
}
1100+
// 云上数据处理
1101+
{
1102+
obj := "pic/deer.jpeg"
1103+
pic := &cos.PicOperations{
1104+
IsPicInfo: 1,
1105+
Rules: []cos.PicOperationsRules{
1106+
{
1107+
FileId: "textwatermark/textwatermark1.jpg",
1108+
Rule: "imageMogr2/" + AIGCMetadata + "|watermark/2/text/6IW-6K6v5LqRwrfkuIfosaHkvJjlm74/fill/IzNEM0QzRA/fontsize/20/dissolve/50/gravity/northeast/dx/20/dy/20/batch/1/degree/45",
1109+
},
1110+
},
1111+
}
1112+
processWhenCloud(context.Background(), rawurl, obj, pic)
1113+
}
1114+
}
1115+
10651116
func main() {
1066-
commonProcess()
1117+
// commonProcess()
10671118
}

example/CI/workflow_and_job/jobs.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ import (
1212
"github.com/tencentyun/cos-go-sdk-v5/debug"
1313
)
1414

15+
const (
16+
OutputBucket = "test-125000000"
17+
)
18+
1519
func log_status(err error) {
1620
if err == nil {
1721
return
@@ -1187,6 +1191,77 @@ func InvokeMultiGeneratePlayListJobs() {
11871191
fmt.Printf("%+v\n", createJobRes.JobsDetail)
11881192
}
11891193

1194+
func InvokeAIGCSegmentJob() {
1195+
c := getClient()
1196+
createJobOpt := &cos.CreateJobsOptions{
1197+
Tag: "Segment",
1198+
Input: &cos.JobInput{
1199+
Object: "trans1.mp4",
1200+
},
1201+
Operation: &cos.MediaProcessJobOperation{
1202+
Output: &cos.JobOutput{
1203+
Region: "ap-chongqing",
1204+
Object: "trans-Segment.mp4",
1205+
Bucket: OutputBucket,
1206+
},
1207+
Segment: &cos.Segment{
1208+
Format: "mp4",
1209+
AIGCMetadata: &cos.AIGCMetadata{
1210+
Label: "1",
1211+
ContentProducer: "AIGC-Bqwdvi-1584",
1212+
ProduceID: "CI-2025-XXXXX-${InputName}",
1213+
},
1214+
},
1215+
},
1216+
}
1217+
createJobRes, _, err := c.CI.CreateJob(context.Background(), createJobOpt)
1218+
log_status(err)
1219+
fmt.Printf("%+v\n", createJobRes.JobsDetail)
1220+
}
1221+
1222+
// InvokeTranscodeJob 提交一个转码任务
1223+
// https://cloud.tencent.com/document/product/460/84790
1224+
func InvokeAIGCTranscodeJob() {
1225+
c := getClient()
1226+
createJobOpt := &cos.CreateJobsOptions{
1227+
Tag: "Transcode",
1228+
Input: &cos.JobInput{
1229+
Object: "trans1.mp4",
1230+
},
1231+
Operation: &cos.MediaProcessJobOperation{
1232+
Output: &cos.JobOutput{
1233+
Region: "ap-chongqing",
1234+
Object: "trans-abc.mp4",
1235+
Bucket: OutputBucket,
1236+
},
1237+
Transcode: &cos.Transcode{
1238+
Container: &cos.Container{
1239+
Format: "mp4",
1240+
},
1241+
Video: &cos.Video{
1242+
Codec: "H.264",
1243+
},
1244+
Audio: &cos.Audio{
1245+
Codec: "AAC",
1246+
},
1247+
TransConfig: &cos.TransConfig{
1248+
AIGCMetadata: &cos.AIGCMetadata{
1249+
Label: "1",
1250+
ContentProducer: "AIGC-Bqwdvi-1584",
1251+
ProduceID: "CI-2025-XXXXX-${InputName}",
1252+
},
1253+
},
1254+
},
1255+
1256+
UserData: "hello world",
1257+
CustomId: "",
1258+
},
1259+
}
1260+
createJobRes, _, err := c.CI.CreateJob(context.Background(), createJobOpt)
1261+
log_status(err)
1262+
fmt.Printf("%+v\n", createJobRes.JobsDetail)
1263+
}
1264+
11901265
func main() {
11911266
// InvokeTranscodeJob()
11921267
InvokeMultiGeneratePlayListJobs()

0 commit comments

Comments
 (0)