最近有个事件回放的功能需求:移动端会将所有截图(webp格式)以及操作手势信息(坐标+时间戳)发送到服务端,然后服务端将图片于位置信息进行合成(重新绘图),然后调用ffmpeg工具将图片连接成视频,供web前段播放。以下是主要步骤:
- 操作员在服务端配置:指定的客户(deviceId,userId),指定事件回放的时间段(t1,t2),这些数据存入Oracle的表RAZOR_EVENT_REPLAY 中
-
手机端启动应用时,访问接口/pushpolicyquery,请求参数为{"appKey":"xxxxxxxxxxx","useridentifier":"xxxxxxxxxxx","deviceid":"xxxxxxxxxxx"}
服务端根据请求的userId或deviceId以及APPkey查询表RAZOR_EVENT_REPLAY、RAZOR_CHANNEL_PRODUCT,若有其事件回放的配置信息,则返回该信息,否则返回空,返回数据: -
当手机端APP满足一定条件后,获取事件回放的相关数据(图片名:eventReplay_Id+时间 ,比如10029829_1487765797853),并将数据发送至接口/saveEventReplay接口
上传图片数据:attachment=xxxx
上传手势等文本数据:
服务端保存成功后返回: flag == 1 保存成功
- 服务端先将图片、操作手势等信息保存至本地,
利用ffmpeg将webp格式的图片转化为jpg格式:ffmpeg -i webwxgetmsgimg.webp test.jpg
后期调用jar包获取本地数据,并根据操作手势信息将水印加到图片上,然后再保存至本地
- 利用linux shell脚本调用第三方软件ffmpeg将图片连接成视频,供web端调用显示
- 多张图片连接成视频:
ffmpeg -r 5 -f image2 -i frames/img_out%4d.jpg test22.mp4 #每秒5帧图片
- 多张图片连接成视频:
6.将第4,5步写为shell 脚本,方便一次调用