GoLang - 通过视频寻找(作为字节)

Ger*_*mbe 3 video streaming skip go seek

我正在golang中编写一个服务器,我得到它来提供一个基本的.mp4文件.它按字节提供服务.问题是我无法搜索/跳过视频.我试过整个stackover流程搜索并谷歌找到答案,但我来得很短..

这是我的代码:

package main

import (
    "net/http"
    "io/ioutil"
    "fmt"
    "os"
    "log"
    "bytes"
)

func ServeHTTP(w http.ResponseWriter, r *http.Request) {
           // grab the generated receipt.pdf file and stream it to browser
           streamPDFbytes, err := ioutil.ReadFile("./video.mp4")
           log.Println(r)
           if err != nil {
                   fmt.Println(err)
                   os.Exit(1)
           }

           b := bytes.NewBuffer(streamPDFbytes)

           // stream straight to client(browser)
           w.Header().Set("Content-type", "video/mp4")

           if _, err := b.WriteTo(w); err != nil { // <----- here!
                   fmt.Fprintf(w, "%s", err)
           }

           w.Write([]byte("Video Completed"))
}

func main() {
    http.Handle("/", new(MyHandler))
    http.ListenAndServe(":8080", nil)
}
Run Code Online (Sandbox Code Playgroud)

有没有人有答案如何在golang寻求工作?

谢谢,祝你有个美好的一天!

Cra*_*row 5

在寻求支持的情况下,在Go上传输MP4视频的最简单方法是

package main

import (
    "net/http"
)

func main() {
    fs := http.FileServer(http.Dir("."))
    http.Handle("/", http.StripPrefix("/", fs))
    http.ListenAndServe(":8080", nil)
}
Run Code Online (Sandbox Code Playgroud)

视频将在http:// localhost:8080/video.mp4上提供

更复杂的是

package main

import (
    "log"
    "net/http"
    "os"
    "time"
)

func ServeHTTP(w http.ResponseWriter, r *http.Request) {
    video, err := os.Open("./video.mp4")
    if err != nil {
        log.Fatal(err)
    }
    defer video.Close()

    http.ServeContent(w, r, "video.mp4", time.Now(), video)
}

func main() {
    http.HandleFunc("/", ServeHTTP)
    http.ListenAndServe(":8080", nil)
}
Run Code Online (Sandbox Code Playgroud)

如果您需要更灵活的东西,您应该实现自己的渐进式流媒体服务器.

在您的代码中,您忘记添加和处理Range/ Accept-Range标题,这就是为什么也没有FF,Chrome也没有向您展示搜索栏,但无论如何我不认为将整个MP4文件保存在内存中是个好主意.