使用的结构体
Config
主要用于读取config.yaml文件的配置,主要由三个部分组成,一是Server,这一部分主要是组成了本地服务的配置,例如端口、服务路径等,二是Database这部分主要是组成数据库的配置,例如数据库用户密码,三是System,主要有系统配置,例如最大的协程数量
在实际使用时,主要使用c来使用
Video
这个是用来方便存取视频的信息,主要有视频标题、封面、路径、哈希值、类型
VideoProcessor
这个是想要使用ffmpeg接口而是用的,主要是接收方法的结构体,这个更加方便了ffmpeg对于基础变量的调用,当时是没有使用video的
processNum
这个是完全空的结构体,设计主要是为了进行协程数量的控制
接口
可以使用的接口
/api/play,这个是跳转到首页的接口
/api/search,这个接口实现了视频搜索
/play/,这个是根路径,视频资源的url都在这个下面
/api/poster/,这个主要是放了各种视频资源的封面
需要实现的接口
/api/login,这个接口需实现用户登录逻辑
/api/check-auth,这个接口需要实现用户登录session检查相关的
函数
main.go
已经完成
func corsHandler(next http.Handler)http.Handler;这个函数实现了浏览器允许跨域的相关内容,现在允许本机的8081端口
func main();这个函数主要完成路由注册、端口监听、全局变量设置的功能
L这个函数具体实现了读取配置文件的功能,并且返回一个Config实例和一个error类型的实例
func Index(db *sql.DB) http.HandlerFunc这个函数主要是一段对于首页请求的处理,这段代码采用了闭包工厂模式来处理 HTTP 路由。通过显式依赖注入的方式,将 *sql.DB 数据库连接池注入到 Handler 中。返回的匿名函数,将 db 实例捕获到自己的作用域内。通过db执行sql语句,将结果以json的方式返回给前端
func Search(db *sql.DB) http.HandlerFunc这个函数是对于搜索功能的请求,和Index函数基本相同,只是获取了前端传来的标题,修改了sql语句
未完成
func CheckAuthHandler(w http.ResponseWriter, r *http.Request);这个函数主要是要完成检查用户登陆时session的情况
database_conn.go
func Initdb(config *Config) *sql.DB这个函数主要通过main中读取的配置文件的信息初始化mysql库中的结构体,返回一个*sql.DB实例
func Conndata(dns string) *sql.DB这个函数主要是进行数据库连接的,在Initdb中返回的是这个函数的调用,通过上面的参数,将数据库进行连接测试等,最后返回一个完整的实例对象,最终的会在Initdb返回给调用函数
func checkData(db *sql.DB, hash string) bool这个函数主要是通过hash来判断数据库中是否存在当前查询视频是否存在
func getStorageName(originalName string) string 这个函数主要是接收一个字符串,将这个字符串通过md5的方式,转换为32位的hash字符串
func insertData(db *sql.DB, title, path, poster, filehash string, status int) error这个函数主要是插入视频信息
func GetVideo(db *sql.DB) (videos []Video, err error)这个函数是在main中处理首页信息时,调用的函数,这个函数会返回数据库中所有视频,的信息
func fuzzySearch(db *sql.DB, rows, title string) (videos []Video)这个函数是模糊查询,主要是在处理搜索请求时被调用
systemFile.go
func checkPosterFile(posterName, posterPath string) bool判断封面是否创建成功
func getPosterPath(ppath, path string) string通过配置文件中的配置来设置封面存储位置
func GetInitData(c *Config) (videos []Video)读取配置文件中的目录,将所有视频都放到列表中,
func getVideo(path, rootPath string) (videos []Video)这个是上面的函数进行调用的函数,主要用于找到目录中的视频,如果说目录中还有目录则会递归调用自己,深度搜索,rootPath 是一个不变的路径,主要用于获取基于web根目录下的相对路径。如果说相对路径中包含路径分隔符的话就会被识别成一个系列的视频,例如三国演义下有有多个视频,这些视频都在三国演义下,相对路径就会是三国演义/xx.mkv,这个视频都是一个系列。
func insertInitData2ts(c *Config, db *sql.DB)插入数据库将上面处理好的视频