大概思路
<p>讨论几种可能的业务需求,想一下步骤</p>
<h4>0. 除了回调,还提供主动查询功能,格式与回调完全一致</h4>
<h4>1. 获取 sts 授权 , 然后上传视频,业务方需要拿到宽高</h4>
<p>获取 sts 的时候,aliserver 创建凭证,记录信息, 返回给业务方</p>
<p>业务方获取到凭证,进行上传</p>
<p>aliserver 接受到回调,记录宽,高,封面图信息,记录到资源大表</p>
<p>业务方调用查询接口,查询资源大表,可以查到是否处理完毕</p>
<p>在这里,video_id 作为唯一标识</p>
<h4>2. 创建水印,创建模板等同步请求</h4>
<p>业务方调用 aliserver</p>
<p>aliserver 创建水印,返回水印信息</p>
<p>业务方实时得到水印信息</p>
<h4>3. 通过 url 上传,需要拿到上传后视频的信息</h4>
<p>业务方调用 aliserver</p>
<p>aliserver 调用阿里云</p>
<p>阿里云返回回调,aliserver 回调到业务方</p>
<p>记录哪些信息?成功、失败?</p>
<h4>4. “工作流” (比如上传视频,并增加水印)</h4>
<p>业务方指定要对视频进行的操作</p>
<p>调用示例: 办法名('视频后缀id', '打水印id', '其他')</p>
<p>队列为 null,不再执行</p>
<p>aliserver等待视频处理和截图两个回调,再回调给业务方 (或者处理完成时回调一次,解析完成再回调一次,回调的通用性,不能写死)</p>
<h4>5. 其他</h4>
<p>无论是哪种上传(普通上传,url上传,视频合成上传)</p>
<p>最终都会触发解析完成 + 截图回调,</p>
<p>即只要触发了这两个回调的,统统记下?</p>
<hr />
<h4>6. 业务方回调的触发条件设计</h4>
<p>需要像阿里一样,业务方可以定义只接受那些回调吗?</p>
<p>也可以暂时就是规定有几种回调,只不过那边接不接而已。</p>
<p>回调表以什么作为标识?一个全局的 唯一id 吗?</p>
<p>如何明确是否进行回调?使用或运算?</p>
<h4>7. 阿里那边的回调规划</h4>
<p>URL上传视频完成 (通过 url 进行了上传)</p>
<p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/0a65509c8447310c5ea6af0bf3d52a52?showdoc=.jpg" alt="" /></p>
<p>视频上传完成 (同步等待上传)
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/69224feb0d33e3dc287055aec862a572?showdoc=.jpg" alt="" /></p>
<p>剪辑合成完成
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/f809b18b529f3efaea4e259d98ebca60?showdoc=.jpg" alt="" /></p>
<p>全部清晰度转码完成(打水印、转码)
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/674d9c0842a6152cd2477180923e4c9c?showdoc=.jpg" alt="" /></p>
<p>音视频分析完成
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/ae9546f096d1ed4a7cab96d85ab7711f?showdoc=.jpg" alt="" /></p>
<p>视频截图完成
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/98b96c10509972e15e1b8b7b1bf937dd?showdoc=.jpg" alt="" /></p>
<h4>8. 工作流的追踪方案:</h4>
<p>业务方 比如回调 <a href="http://callback.com">http://callback.com</a> ,参数 article = 1 给我,然后发起请求</p>
<p>调用示例: 办法名('视频后缀id', '打水印id' ,'user_data') </p>
<p>回调父级表 存入 id old_video_id user_data ,然后同步返回 id</p>
<p>缓存里加入 id: [trancode, byurl, combin:"file_id:11"] </p>
<p>每次都带上id, 并且从缓存里匹配当前操作,然后进行下一个操作</p>
<p>每次都回调子表加入当前操作,便于中断时排查</p>
<p>最后一次操作后,清空缓存</p>
<p>解析视频和截图的回调中,将信息存入资源大表</p>
<p>根据new_video查询资源大表,发现宽高都在,回调给业务方</p>
<p>应该要的:</p>
<p>视频相关的资源大表</p>
<p>水印相关的资源大表</p>
<p>回调父表
id user_data call_url old_video_id new_video_id flag</p>
<p>回调子表
id now_video_id now_process is_final
id now_video_id now_process is_final
id now_video_id now_process is_final = true 接受视频宽高、封面图的回调</p>
<p>Redis 缓存存放工作流步骤,需要参数</p>
<hr />
<p>先要实现的功能:</p>
<hr />
<p>问题:</p>
<ol>
<li>
<p>新旧 video_id 两条记录都在资源大表,他们的关系是怎么样的?</p>
</li>
<li>
<p>有些爬虫 (比如经常爬的大板凳),可能没有标题,只有 md5 视频链接后的标题</p>
</li>
<li>
<p>视频转码、水印问题,不同的分辨率可能需要转不同码率,才不会影响清晰度,如何处理。
自适应模板 ,依旧保持一个水印 = 一个模板</p>
</li>
<li>
<p>视频片尾问题,不同大小的视频如何适应不同的片尾。宽竖屏、正方形如何适应。</p>
<p>拼接现在知道会以最大分辨率的那个视频为拼接后逇分辨率
片尾的形式,大小,分辨率要定一下</p>
</li>
<li>
<p>打水印问题</p>
<pre><code>{
"Watermarks":[
{
"WatermarkId":"9de5dddf5b5fda9046d2fdd43f43a397",
"FileUrl":"http://outin-ff28f6cd5f5e11e9bd8400163e1c8dba.oss-cn-shanghai.aliyuncs.com/watermark/0195204206FD4B03A54F4D9C19D0C193-0-2.png",
"WatermarkConfig":{
"Dx":"0.01",
"Dy":"0.01",
"Width":"123",
"Height":"456",
"ReferPos":"BottomLeft"
}
}
]
}
</code></pre>
<p>WatermarkId 必须为转码模板相关联的水印 id
url 为新的水印的 oss 的 url,而且必须是http
可以指定打水印的位置和宽高比</p>
<p>另外,直接上传指定模板有时候不会打水印,必须用接口?这是 why
也有可能是bug,使用水印替换后,管理台直接上传选模板不再打水印</p>
<p><a href="https://api.aliyun.com/#/?product=vod&api=SubmitTranscodeJobs¶ms={%22RegionId%22:%22default%22,%22OverrideParams%22:%22{\%22Watermarks\%22:[{\%22WatermarkId\%22:\%229de5dddf5b5fda9046d2fdd43f43a397\%22,\%22FileUrl\%22:\%22http://outin-ff28f6cd5f5e11e9bd8400163e1c8dba.oss-cn-shanghai.aliyuncs.com/watermark/9E4CFBBF9B0F47689FCFB03C52947C72-0-2.png\%22,\%22WatermarkConfig\%22:{\%22Dx\%22:\%220.01\%22,\%22Dy\%22:\%220.01\%22,\%22Width\%22:\%22350\%22,\%22Height\%22:\%22200\%22,\%22ReferPos\%22:\%22TopRight\%22}}]}%22,%22TemplateGroupId%22:%2238fb5cff218a7402beddf1bfda516939%22,%22VideoId%22:%2297c6cefa634243bb92982903d5b2013a%22}&tab=DEMO&lang=PHP">https://api.aliyun.com/#/?product=vod&api=SubmitTranscodeJobs¶ms={%22RegionId%22:%22default%22,%22OverrideParams%22:%22{\%22Watermarks\%22:[{\%22WatermarkId\%22:\%229de5dddf5b5fda9046d2fdd43f43a397\%22,\%22FileUrl\%22:\%22http://outin-ff28f6cd5f5e11e9bd8400163e1c8dba.oss-cn-shanghai.aliyuncs.com/watermark/9E4CFBBF9B0F47689FCFB03C52947C72-0-2.png\%22,\%22WatermarkConfig\%22:{\%22Dx\%22:\%220.01\%22,\%22Dy\%22:\%220.01\%22,\%22Width\%22:\%22350\%22,\%22Height\%22:\%22200\%22,\%22ReferPos\%22:\%22TopRight\%22}}]}%22,%22TemplateGroupId%22:%2238fb5cff218a7402beddf1bfda516939%22,%22VideoId%22:%2297c6cefa634243bb92982903d5b2013a%22}&tab=DEMO&lang=PHP</a></p>
<pre><code>[{
"Video":{
"Codec":"H.264",
"Bitrate":"9999",
"Remove":"false",
"Fps":"16"
},
"Audio":{
"Codec":"AAC",
"Bitrate":"64",
"Samplerate":"44100"
},
"Container":{
"Format":"mp4"
},
"TemplateName" : "test",
"Definition": "SD",
"TransConfig":{
"IsCheckReso":"true",
"IsCheckVideoBitrate":"false"
}
}]</code></pre>
<hr />
<p>最后一次回调</p>
<p>普通授权上传</p>
<p>任务流授权上传</p>
<p>上传完成 =》 写库</p>
<p>解析完成 =》 更新信息</p>
<p>截图完成 =》 更新信息</p>
<p>回调业务方</p>
<hr />
</li>
</ol>
<p>水印上传</p>
<p>=》 上传一张图片(获取 base64) =》 上传成功,用这张图片生成 横屏 竖屏 两个,返回一个 id</p>
<p>视频合成</p>
<p>=》 业务方自己申请凭证,然后上传
=》 传 vidoo_id + 视频名称 =》 生成后缀</p>
<hr />
<p>工作流</p>
<p>=》 水印 + 视频拼接</p>
<p>=》 视频拼接 + 水印</p>
<p>=》 视频拼接 + 水印 + 转清晰度</p>
<p>不一定是在最后一次接受到宽、高、截图</p>
<h4></h4>