| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- package main
- import (
- "encoding/base64"
- "encoding/json"
- "io/ioutil"
- "net/http"
- "os"
- "path/filepath"
- "sort"
- "strings"
- "github.com/go-ini/ini"
- "github.com/labstack/echo/v4"
- "github.com/labstack/echo/v4/middleware"
- )
- var config MainConfig
- type MainConfig struct {
- Listenaddr string //监听地址
- Baseurl string //监听地址
- Rootdir string //root文件夹
- DvrDir []string //dvr文件夹
- Secure string //加密字符串
- }
- func (o *MainConfig) ReadConfig() bool {
- dir, _ := os.Getwd() //filepath.Abs(filepath.Dir(os.Args[0]))
- path := dir + string(filepath.Separator)
- var ret = false
- fini, err := ini.Load(path + "main.ini")
- if err == nil {
- fsec := fini.Section("mediasvr")
- if fsec != nil {
- o.Listenaddr = fsec.Key("listenaddr").String()
- o.Baseurl = fsec.Key("baseurl").String()
- o.Secure = fsec.Key("secure").String()
- o.Rootdir = fsec.Key("rootdir").String()
- dvrdir := fsec.Key("dvrdir").String()
- if len(dvrdir) > 0 {
- o.DvrDir = strings.Split(dvrdir, ",")
- }
- ret = true
- }
- }
- return ret
- }
- // 根据流ID和日期,获取对应的回放文件链接
- func getFile(streams, date string) []string {
- var fileList []string
- for _, dir := range config.DvrDir {
- path := string(filepath.Separator) + dir + string(filepath.Separator) + streams + string(filepath.Separator) + date
- if rd, err := ioutil.ReadDir(config.Rootdir + path); err == nil {
- for _, fi := range rd {
- //过滤掉路径和非mp4文件
- if !fi.IsDir() && strings.HasSuffix(fi.Name(), ".mp4") {
- httpurl := config.Baseurl + strings.ReplaceAll(path+string(filepath.Separator)+fi.Name(), string(filepath.Separator), "/")
- fileList = append(fileList, httpurl)
- }
- }
- }
- }
- sort.Strings(fileList)
- return fileList
- }
- func SearchFile(c echo.Context) error {
- streamid := c.Param("streamid")
- date := c.Param("date")
- debug := c.Param("debug")
- var list []string
- //hxz
- if len(streamid) > 0 && len(date) > 0 {
- list = getFile(streamid, date)
- }
- if len(list) == 0 {
- list = make([]string, 0)
- }
- if debug == "bug" {
- return c.JSON(http.StatusOK, list)
- } else if buf, err := json.Marshal(list); err == nil {
- enstr := "LC" + base64.StdEncoding.EncodeToString(buf)
- //hxz
- return c.String(http.StatusOK, enstr)
- }
- return nil
- }
- func main() {
- if !config.ReadConfig() {
- return
- }
- e := echo.New()
- e.Use(middleware.Recover())
- e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
- AllowOrigins: []string{"*"},
- AllowMethods: []string{"*"},
- AllowHeaders: []string{"*"},
- AllowCredentials: true,
- ExposeHeaders: []string{"Content-Length", "Access-Control-Allow-Origin"},
- }))
- e.Debug = true
- e.HideBanner = true
- //注册一个Get请求, 路由地址为: 并且绑定一个控制器函数, 这里使用的是闭包函数。
- e.GET("/list/:streamid/:date", SearchFile)
- e.GET("/list/:streamid/:date/:debug", SearchFile)
- e.Static("/", config.Rootdir)
- //e.StartTLS(config.Listenaddr, "server.crt", "server.key")
- e.Logger.Fatal(e.Start(config.Listenaddr))
- }
|