欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

国标GB28181协议国标流媒体平台EasyGBS设备录像下载为PS文件如何转换成MP4文件?

程序员文章站 2022-07-13 12:49:43
...

国标GB28181协议视频平台可以进行设备录像,设备录像文件可以通过接口调用获取(EasyGBS内通过接口调取设备录像的下载文件)。

国标GB28181协议国标流媒体平台EasyGBS设备录像下载为PS文件如何转换成MP4文件?

有用户在下载EasyGBS设备录像之后,发现下载的是ps文件。

国标GB28181协议国标流媒体平台EasyGBS设备录像下载为PS文件如何转换成MP4文件?

国标GB28181协议国标流媒体平台EasyGBS设备录像下载为PS文件如何转换成MP4文件?

由于ps文件的特殊性,很多播放器都不支持,所以需要将ps文件转换成mp4文件。

我们可以添加如下代码,利用ffmpeg将ps转换为mp4:

if len(filenamehz) == 2 && filenamehz[1] == "ps" {
        outFile := filepath.Join(utils.DataDir(), "downloads", fmt.Sprintf("%s.mp4", filenamehz[0]))
        inFile := filepath.Join(utils.DataDir(), "downloads", filename)
        if _, err := os.Stat(inFile); os.IsNotExist(err) {
            c.AbortWithStatusJSON(http.StatusBadRequest, "录像文件不存在或已过期")
            return
        }
        ff.H264ToMP4(inFile, outFile)
        header := c.Writer.Header()
        header["Content-type"] = []string{"application/octet-stream"}
        header["Content-Disposition"] = []string{"attachment; filename=" + strings.ReplaceAll(filename, ".ps", ".mp4")}
        if !utils.Exist(outFile) {
            c.AbortWithStatusJSON(404, "file not found")
            return
        }
        c.File(outFile)
        if err := os.Remove(outFile); err != nil {
            log.Println(err)
        }
        if err := os.Remove(inFile); err != nil {
            log.Println(err)
        }
}

转换过后页面下载正常,并且普通播放器也能够播放了。

国标GB28181协议国标流媒体平台EasyGBS设备录像下载为PS文件如何转换成MP4文件?

国标GB28181视频平台

EasyGBS国标视频云服务提供流转发服务,可分发RTSP、RTMP、FLV、HLS多种格式,实现web浏览器、手机浏览器、微信、PC客户端等各种终端无插件播放。

国标GB28181协议国标流媒体平台EasyGBS设备录像下载为PS文件如何转换成MP4文件?

EasyGBS提供用户管理及web可视化页面管理,及录像检索、回放等功能,基于动态组网服务创建智能网络,可按需选择需要组网的网络成员实现点点互联,且对外提供服务器获取状态、信息,控制 HTTP API接口,可*进行二次开发。