Skip to content

Commit

Permalink
Merge pull request #216 from NigelWu95/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
吴炳亨 committed Jun 13, 2019
2 parents 789ec68 + dfab012 commit dbd3b75
Show file tree
Hide file tree
Showing 75 changed files with 1,974 additions and 943 deletions.
4 changes: 1 addition & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@ out/
.idea_modules/

### custom
resources/.*.properties
resources/.*.json
resources/.*.config
resources/.*
assembly/
.DS_Store
9 changes: 8 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,15 @@ x.xx-thin 为降配版,适用于 4C8G 及以下的机器),能够**并发
- [x] 根据音视频资源的 avinfo 信息来生成转码指令 [pfopcmd 配置](docs/pfopcmd.md)
- [x] 对 m3u8 的资源进行读取导出其中的 ts 文件列表 [exportts 配置](docs/exportts.md)

*【部分 process 属于危险操作,需要在启动后根据提示输入 y/yes 确认,如果不想进行 verify 验证则在命令行加入 -f 参数】*

### 1 程序运行过程
读取[数据源](docs/datasource.md) => [选择[过滤器](docs/filter.md)] => [指定数据[处理过程](#5-处理过程) =>] [结果持久化](docs/resultsave.md)
#### (1)批处理模式
[读取[数据源](docs/datasource.md)] => [选择[过滤器](docs/filter.md)] => [指定数据[处理过程](#5-处理过程) =>] [结果持久化](docs/resultsave.md)
#### (2)交互模式
**所有 process 支持[交互模式](docs/interactive.md)运行**:一次启动,可无限次命令行输入 data,输入一次处理一次并返回结果。
#### (3)单行模式
**所有 process 支持[单行模式](docs/single.md)运行**:一次启动,指定 data 参数,直接一次处理并返回结果。

### 2 运行方式
#### 关于版本
Expand Down
4 changes: 2 additions & 2 deletions docs/asyncfetch.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ ignore-same-key=
|url-index| 字符串| 通过 url 操作时需要设置的 url 索引(下标),需要手动指定才会进行解析|
|add-prefix| 字符串| 表示为保存的文件名添加指定前缀|
|rm-prefix| 字符串| 表示将得到的目标文件名去除存在的指定前缀后再作为保存的文件名|
|host| host 字符串| 抓取源资源时指定 host(暂未启用)|
|host| host 字符串|(暂未启用)抓取源资源时指定 host|
|md5-index| 字符串| 资源 md5 值索引(下标),需要手动指定才会进行解析|
|callback-url| 公网可访问的 url 字符串| 设置回调地址|
|callback-body| body 字符串| 设置回调 body|
|callback-body-type| body-type 字符串| 设置回调 body 类型|
|callback-host| host 字符串| 设置回调 host |
|file-type| 0/1| 文件的存储类型|
|ignore-same-key| true/false|(暂未启用)|
|ignore-same-key| true/false|(暂未启用)为 false 时表示覆盖同名文件,为 true 表示不覆盖|

### 关于 url-index 和 md5-index
当使用 file 源且 parse=tab/csv 时下标必须为整数。url-index 表示输入行含 url 形式的源文件地址,未设置的情况下则使用 key 字段加上 domain 的
Expand Down
4 changes: 2 additions & 2 deletions docs/copy.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ ak=<ak>
sk=<sk>
bucket=<bucket>
to-bucket=<to-bucket>
newKey-index=
toKey-index=
add-prefix=
rm-prefix=
prefix-force=
Expand All @@ -24,7 +24,7 @@ prefix-force=
|ak、sk|长度40的字符串|七牛账号的ak、sk,通过七牛控制台个人中心获取,当数据源为 qiniu 时无需再设置|
|bucket| 字符串| 操作的资源原空间,当数据源为 qiniu 时无需再设置|
|to-bucket| 字符串| 复制资源保存的目标空间|
|newKey-index| 字符串| copy 操作可选择设置的目标文件名索引(下标),需要手动指定才会进行解析|
|toKey-index| 字符串| copy 操作可选择设置的目标文件名索引(下标),需要手动指定才会进行解析|
|add-prefix| 字符串| 表示为保存的文件名添加指定前缀|
|rm-prefix| 字符串| 表示将原文件名去除存在的指定前缀后作为 copy 之后保存的文件名|

Expand Down
141 changes: 141 additions & 0 deletions docs/interactive.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
# 交互式命令行

## 简介
针对 process 功能提供的交互式命令行运行方式,输入初始条件参数后进行交互模式,每输入一行数据则根据初始参数来执行一次 process 并输出结果,然后可进行
下一次的数据输入,直到无数据输入按下【回车】键时则退出。【此功能不需要数据源配置】

## 使用方式
#### 交互式命令行指令 -i/--interactive
在指定 process 和对应所需参数的情况下加上 `-i` 或者 `--interactive` 则进入交互模式,后续输入的每一行数据将根据初始参数来执行 process 操作,
输入的参数与各 process 提供的参数用法一致,具体可参见 process 的文档。如:
`java -jar qsuits.jar -i -process=privateurl -ak=ajkhsfgd -sk=akjdhsdfg -url-index=0`

## process 举例
###### 1 由于命令行作为输入读取时字符串长度存在限制,不支持很长的数据信息输入,如 avinfo 信息可能超过限制的长度,因此不建议在交互模式下进行 pfopcmd 的操作
###### 2 对空间资源执行 pfop 请求 [pfop 配置](pfop.md)
```
➜ ~ java -jar qsuits-6.20.jar -i -process=pfop -ak=ajkhsfgd -sk=akjdhsdfg -bucket=temp -force-public=true -fops-index=1
please input line data to process:
10.mp4 avthumb/mp4
java -jar qsuits-6.20.jar -i -process=pfop -ak=----- -sk=----- -bucket=temp -pipeline=audio-video -fops-index=1
please input line data to process:
10.mp4 avthumb/mp4
10.mp4 z0.5cf4e0b138b9f31ea670c97e
```
###### 3 通过 persistentId 查询 pfop 的结果 [pfopresult 配置](pfopresult.md)
```
➜ ~ java -jar qsuits-6.20.jar -i -process=pfopresult -persistentId-index=0
please input line data to process:
z0.5cf4e0b138b9f31ea670c97e
z0.5cf4e0b138b9f31ea670c97e {"code":0,"desc":"The fop was completed successfully","id":"z0.5cf4e0b138b9f31ea670c97e","inputBucket":"temp","inputKey":"10.mp4","items":[{"cmd":"avthumb/mp4","code":0,"desc":"The fop was completed successfully","hash":"FpBw7VMk5raxi-MG0ooVuPUSMNEs","key":"UAA-4hndfVc5V6DJX0EvslAUBBI=/FhbkdU00yYIPg13-Qu6jZzLVYqvT","returnOld":0}],"pipeline":"0.default","reqid":"5nIAAJCijWpxpKQV"}
please input line data to process:
```
###### 4 查询空间资源的视频元信息 [avinfo 配置](avinfo.md)
```
➜ ~ java -jar qsuits-6.20.jar -i -process=avinfo -url-index=0
please input line data to process:
http://p3l1d5mx4.bkt.clouddn.com/10.mp4
http://p3l1d5mx4.bkt.clouddn.com/10.mp4 {"streams":[{"index":0,"codec_name":"h264","codec_long_name":"H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10","profile":"High","codec_type":"video","codec_time_base":"1/60","codec_tag_string":"avc1","codec_tag":"0x31637661","width":720,"height":486,"coded_width":720,"coded_height":496,"has_b_frames":2,"sample_aspect_ratio":"1:1","display_aspect_ratio":"40:27","pix_fmt":"yuv420p","level":30,"chroma_location":"left","refs":1,"is_avc":"true","nal_length_size":"4","r_frame_rate":"30/1","avg_frame_rate":"30/1","time_base":"1/15360","start_pts":0,"start_time":"0.000000","duration_ts":92160,"duration":"6.000000","bit_rate":"695088","bits_per_raw_sample":"8","nb_frames":"180","disposition":{"default":1,"dub":0,"original":0,"comment":0,"lyrics":0,"karaoke":0,"forced":0,"hearing_impaired":0,"visual_impaired":0,"clean_effects":0,"attached_pic":0,"timed_thumbnails":0},"tags":{"creation_time":"2011-09-15T17:31:45.000000Z","language":"eng","handler_name":"VideoHandler"}}],"format":{"nb_streams":1,"nb_programs":0,"format_name":"mov,mp4,m4a,3gp,3g2,mj2","format_long_name":"QuickTime / MOV","start_time":"0.000000","duration":"6.000000","size":"524167","bit_rate":"698889","probe_score":100,"tags":{"major_brand":"isom","minor_version":"512","compatible_brands":"isomiso2avc1mp41","creation_time":"2011-09-15T17:31:45.000000Z","encoder":"Lavf57.71.100"}}}
please input line data to process:
```
###### 5 查询资源的 qhash [qhash 配置](qhash.md)
```
➜ ~ java -jar qsuits-6.20.jar -i -process=qhash -url-index=0
please input line data to process:
http://p3l1d5mx4.bkt.clouddn.com/10.mp4
http://p3l1d5mx4.bkt.clouddn.com/10.mp4 {"hash":"dc7a26a67763b478f0b05ec38b769349","fsize":524167}
```
###### 6 异步抓取资源到指定空间 [asyncfetch 配置](asyncfetch.md)
```
➜ ~ java -jar qsuits-6.20.jar -i -process=asyncfetch -ak=------ -sk=------- -to-bucket=temp -url-index=0
please input line data to process:
http://p3l1d5mx4.bkt.clouddn.com/10.mp4
10.mp4 http://p3l1d5mx4.bkt.clouddn.com/10.mp4 200 {"id":"eyJ6b25lIjoiejAiLCJxdWV1ZSI6IlNJU1lQSFVTLUpPQlMtVjMiLCJwYXJ0X2lkIjozMCwib2Zmc2V0IjoxMjI3NTUwN30=","wait":14}
```
###### 7 修改空间资源的生命周期 [lifecycle 配置](lifecycle.md)
```
➜ ~ java -jar qsuits-6.20.jar -i -process=lifecycle -ak=------ -sk=------- -bucket=temp -days=1
please input line data to process:
10.mp4
10.mp4 1
```
###### 8 修改空间资源的状态(启用/禁用)[status 配置](status.md)
```
➜ ~ java -jar qsuits-6.20.jar -i -process=status -ak=-------- -sk=-------- -bucket=temp -status=1
please input line data to process:
10.mp4
https://rs.qbox.me/chstatus/dGVtcDoxMC5tcDQ=/status/1 {ResponseInfo:com.qiniu.http.Response@453da22c,status:400, reqId:owYAAEhBB6FpqqQV, xlog:-, xvia:vdn-gdzh-tel-1-4, adress:rs.qbox.me/113.106.101.6:443, duration:0.000000 s, error:already disabled} {"error":"already disabled"}
```
###### 9 修改空间资源的存储类型(低频/标准)[type 配置](type.md)
```
➜ ~ java -jar qsuits-6.20.jar -i -process=type -ak=--------- -sk=-------- -bucket=temp -type=1
please input line data to process:
10.mp4
https://rs.qbox.me/chtype/dGVtcDoxMC5tcDQ=/type/1 {ResponseInfo:com.qiniu.http.Response@442675e1,status:400, reqId:rG8AANO3CON7qqQV, xlog:-, xvia:vdn-gdzh-tel-1-7, adress:rs.qbox.me/113.106.101.4:443, duration:0.000000 s, error:already in line stat} {"error":"already in line stat"}
```
###### 10 复制资源到指定空间 [copy 配置](copy.md)
```
➜ ~ java -jar qsuits-6.20.jar -i -process=copy -ak=-------- -sk=-------- -bucket=temp -to-bucket=ts-work
please input line data to process:
10.mp4
10.mp4 10.mp4
```
###### 11 移动资源到指定空间 [move 配置](move.md)
```
➜ ~ java -jar qsuits-6.20.jar -i -process=move -ak=------- -sk=-------- -bucket=temp -to-bucket=ts-work
please input line data to process:
10.mp4
10.mp4 10.mp4
```
###### 12 对指定空间的资源进行重命名 [rename 配置](rename.md)
```
➜ ~ java -jar qsuits-6.20.jar -i -process=rename -ak=------ -sk=------- -bucket=temp -add-prefix=1 -prefix-force=true
please input line data to process:
10.mp4
10.mp4 10.mp4
```
###### 13 删除空间资源 [delete 配置](delete.md)
```
➜ ~ java -jar qsuits-6.20.jar -i -process=delete -ak=---------- -sk=--------- -bucket=ts-work
please input line data to process:
10.mp4
10.mp4
```
###### 14 查询空间资源的元信息 [stat 配置](stat.md)
```
➜ ~ java -jar qsuits-6.20.jar -i -process=stat -ak=-------- -sk=-------- -bucket=temp
please input line data to process:
110.mp4
110.mp4 FhbkdU00yYIPg13-Qu6jZzLVYqvT 524167 2019-06-03T19:06:42.137696400 video/mp4 1 1
please input line data to process:
```
###### 15 对设置了镜像源的空间资源进行镜像更新 [mirror 配置](mirror.md)
```
➜ ~ java -jar qsuits-6.20.jar -i -process=mirror -ak=--------- -sk=---------- -bucket=temp
please input line data to process:
10.mp4
https://iovip.qbox.me/prefetch/dGVtcDoxMC5tcDQ= {ResponseInfo:com.qiniu.http.Response@453da22c,status:478, reqId:Zd8AAAATETyxqqQV, xlog:X-Log, xvia:, adress:iovip.qbox.me/115.231.100.199:443, duration:0.000000 s, error:httpGet url failed: E502} {"error":"httpGet url failed: E502"}
```
###### 16 对私有空间资源进行私有签名 [privateurl 配置](privateurl.md)
```
➜ ~ java -jar qsuits-6.20.jar -i -process=privateurl -ak=------- -sk=------- -url-index=0
please input line data to process:
http://test.xxx.com/test.gif
http://test.xxx.com/test.gif?e=1559563838&token=XgP9wnGCGGX8FlS7zxfOQcPev6pFUBo0T:8am3Kt-djGQXy9MS2_lqvzTxkZI=
```
###### 17 对 m3u8 的资源进行读取导出其中的 ts 文件列表 [exportts 配置](exportts.md)
```
➜ ~ java -jar qsuits-6.20.jar -i -process=exportts -url-index=0
please input line data to process:
http://p3l28y6an.bkt.clouddn.com/csc-4.m3u8
http://p3l28y6an.bkt.clouddn.com/room_02/csc000000 60.08sec
http://p3l28y6an.bkt.clouddn.com/room_02/csc000001 60.0sec
http://p3l28y6an.bkt.clouddn.com/room_02/csc000002 60.0sec
http://p3l28y6an.bkt.clouddn.com/room_02/csc000003 60.0sec
http://p3l28y6an.bkt.clouddn.com/room_02/csc000004 60.0sec
http://p3l28y6an.bkt.clouddn.com/room_02/csc000005 60.0sec
http://p3l28y6an.bkt.clouddn.com/room_02/csc000006 60.0sec
http://p3l28y6an.bkt.clouddn.com/room_02/csc000007 60.0sec
http://p3l28y6an.bkt.clouddn.com/room_02/csc000008 60.0sec
http://p3l28y6an.bkt.clouddn.com/room_02/csc000009 7.8sec
```
4 changes: 2 additions & 2 deletions docs/move.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ ak=
sk=
bucket=
to-bucket=
newKey-index=
toKey-index=
add-prefix=
rm-prefix=
prefix-force=
Expand All @@ -24,7 +24,7 @@ prefix-force=
|ak、sk|长度40的字符串|七牛账号的ak、sk,通过七牛控制台个人中心获取,当数据源为 qiniu 时无需再设置|
|bucket| 字符串| 操作的资源原空间,当数据源为 qiniu 时无需再设置|
|to-bucket| 字符串| 移动资源保存的目标空间|
|newKey-index| 字符串| rename 操作所需要设置的目标文件名索引(下标),需要手动指定才会进行解析|
|toKey-index| 字符串| move 操作所需要设置的目标文件名索引(下标),需要手动指定才会进行解析|
|add-prefix| 字符串| 表示为保存的文件名添加指定前缀|
|rm-prefix| 字符串| 表示将原文件名去除存在的指定前缀后作为 move 之后保存的文件名|

Expand Down
25 changes: 14 additions & 11 deletions docs/pfop.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,25 +25,28 @@ force-public=
|pipeline| 字符串| 进行持久化数据处理的队列名称|
|force-public| true/false| 是否强制使用共有队列(会有性能影响)|
|fops-index| 字符串| 转码命令索引(下标),pfop 操作时指定,明确指定文件名对应的转码命令,建议命令中携带 saveas 重命名指令否则使用默认名|
|pfop-config| 文件路径字符串| 进行转码和另存规则设置的配置文件路径,该配置会覆盖 fops-index 设置的转码命令,配置文件格式为 json,用于设置多个转码条件和指令,配置举例:[pfop-config 配置](../resources/pfop.json)|
|pfop-config| 文件路径字符串| 进行转码和另存规则设置的 json 配置文件路径,可设置多个转码条件和指令,该配置会覆盖 fops-index 设置的转码命令,[配置写法](##-pfop-config-配置文件内容写法如下:)|

#### 关于 fops-index
指定输入行中对应转码的命令字段下标,不设置为则无法进行解析。由于转码必须参数包含 key 和 fops,因此输入行中也必须包含 key 字段的值,使用 indexes
参数设置 key 下标,同时 key 下标不能与 fops 下标相同。

#### # pfop-config 配置文件写法如下
#### # pfop-config 配置文件内容写法如下
```
{
"F720":{
"cmd":"avthumb/mp4/s/1280x720/autoscale/1",
"saveas":"bucket:$(key)F720.mp4"
},
"avsmart":{
"cmd":"avsmart/mp4",
"saveas":"bucket:$(key)-avsmart.mp4"
}
"pfop":[
{
"cmd":"avthumb/mp4/s/1280x720/autoscale/1",
"saveas":"bucket:$(key)F720.mp4"
},
{
"cmd":"avsmart/mp4",
"saveas":"bucket:$(key)-avsmart.mp4"
}
]
}
```
```
如上所示,pfop 操作的配置名称为 "pfop",配置项为 json array,可参见 [pfop-config 配置](../resources/process.json)
|必须选项|含义|
|-----|-----|
|key|上述配置文件中的 "F720" 为转码项名称,设置为 json key,key 不可重复,重复情况下后者会覆盖前者|
Expand Down
26 changes: 17 additions & 9 deletions docs/pfopcmd.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,33 @@ avinfo-index=
|参数名|参数值及类型 | 含义|
|-----|-------|-----|
|process=pfopcmd| 该操作设置为pfopcmd| 表示根据 avinfo 生成音视频转码指令|
|pfop-config| 文件路径字符串| 进行转码和另存规则设置的配置文件路径,配置文件格式为 json,用于设置多个转码条件和指令,配置举例:[pfop-config 配置](../resources/pfopcmd.json)|
|pfop-config| 文件路径字符串| 进行转码和另存规则设置的 json 配置文件路径,可设置多个转码条件和指令,[配置写法](##-pfop-config-配置文件内容写法如下:)|
|duration| true/false| 得到的结果行中是否需要保存 duration(音视频时长)信息,会放在转码指令字段之后 |
|size| true/false| 得到的结果行中是否需要保存 size(音视频时长)信息,会放在 duration 字段之后|
|avinfo-index| 字符串| 读取 avinfo 信息时需要设置的 avinfo 字符串索引(下标),必须指定才能进行处理|

#### # pfop-config 配置文件写法如下
#### # pfop-config 配置文件内容写法如下
```
{
"F720":{
"scale":[1000,1279],
"cmd":"avthumb/mp4/s/1280x720/autoscale/1",
"saveas":"bucket:$(key)F720.mp4"
}
"pfopcmd":[
{
"scale":[1000,1280],
"cmd":"avthumb/mp4/s/1280x720/autoscale/1",
"saveas":"bucket:$(key)F720.mp4"
},
{
"scale":[1280],
"cmd":"avthumb/mp4/s/1280x720/autoscale/1",
"saveas":"bucket:$(key)F1080"
}
]
}
```
```
如上所示,pfopcmd 操作的配置名称为 "pfopcmd",配置项为 json array,可参见 [pfop-config 配置](../resources/process.json)
|必须选项|含义|
|-----|-----|
|key|上述配置文件中的 F720 为转码项名称,设置为 json key,key 不可重复,重复情况下后者会覆盖前者|
|scale| 表示 width 的范围,只设置了一个值则表示目标范围大于该值,程序根据 avinfo 判断宽度范围在此区间,才针对文件名生成转码指令,否则跳过|
|scale| 表示视频分辨率 width 的范围,只设置了一个值则表示目标范围大于该值,程序根据 avinfo 判断宽度范围对在此区间的文件生成转码指令|
|cmd| 需要指定的转码指令 |
|saveas| 转码结果另存的格式,写法为:<bucket>:<key>,其中 <key> 支持[魔法变量](#魔法变量)|

Expand Down
4 changes: 2 additions & 2 deletions docs/rename.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ process=rename
ak=
sk=
bucket=
newKey-index=
toKey-index=
add-prefix=
rm-prefix=
```
Expand All @@ -21,7 +21,7 @@ rm-prefix=
|process=rename| 资源重命名时设置为rename| 表示重命名操作|
|ak、sk|长度40的字符串|七牛账号的ak、sk,通过七牛控制台个人中心获取,当数据源为 qiniu 时无需再设置|
|bucket| 字符串| 操作的资源原空间,当数据源为 qiniu 时无需再设置|
|newKey-index| 字符串| rename 操作所需要设置的目标文件名索引(下标),需要手动指定才会进行解析|
|toKey-index| 字符串| rename 操作所需要设置的目标文件名索引(下标),需要手动指定才会进行解析|
|add-prefix| 字符串| 表示为保存的文件名添加指定前缀|
|rm-prefix| 字符串| 表示将原文件名去除存在的指定前缀后作为 rename 之后保存的文件名|
|prefix-force| 字符串| 设置了 add-prefix 但未设置 newKey-index 的情况下需要保证该参数为 true|
Expand Down
Loading

0 comments on commit dbd3b75

Please sign in to comment.