java+ffmpeg

    xiaoxiao2021-03-25  65

    最近有个事件回放的功能需求:移动端会将所有截图(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,若有其事件回放的配置信息,则返回该信息,否则返回空,返回数据:

    eventReplayConfigure = [{ "erId" : "1049096" , "erUserId" : "xxx" , "erDeviceId" : "xxxxx" , "erTimeStart" : "2017-01-02 13:08:31" , "erTimeStop" : "2017-01-02 13:08:31" , "erProductId" : "xxx" , "erCreateTime" : "xx" , "erFlag" : "x" } ,   { "erId" : "xxxxxxx" , "erUserId" : "xxx" , "erDeviceId" : "xxxxx" , "erTimeStart" : "2017-01-02 13:08:31" , "erTimeStop" : "2017-01-02 13:08:31" , "erProductId" : "xxx" , "erCreateTime" : "xx" , "erFlag" : "x" } ,                                          .................]

     

     

    当手机端APP满足一定条件后,获取事件回放的相关数据(图片名:eventReplay_Id+时间  ,比如10029829_1487765797853),并将数据发送至接口/saveEventReplay接口 上传图片数据:attachment=xxxx 上传手势等文本数据:

    content={ "data" :[{ "erId" : "1049096" , "data" :{ "motion_x" : "10" , "motion_y" : "10" , "time" : "1487765797853" }} ,                                                    { "erId" : "1049096" , "data" :{ "motion_x" : "11" , "motion_y" : "12" , "time" : "1487765798100" }} ,                                                  .......]};

    服务端保存成功后返回:   flag == 1    保存成功                                                                          

    服务端先将图片、操作手势等信息保存至本地,

    利用ffmpeg将webp格式的图片转化为jpg格式:ffmpeg -i webwxgetmsgimg.webp test.jpg

    后期调用jar包获取本地数据,并根据操作手势信息将水印加到图片上,然后再保存至本地 利用linux shell脚本调用第三方软件ffmpeg将图片连接成视频,供web端调用显示 多张图片连接成视频:

    ffmpeg -r 5 -f image2 -i frames/img_outM.jpg  test22.mp4                        #每秒5帧图片

    6.将第4,5步写为shell 脚本,方便一次调用

    转载请注明原文地址: https://ju.6miu.com/read-38704.html

    最新回复(0)