2016-02-27 4 views
2

Я пишу сервер в golang, и я получил его для обслуживания базового файла .mp4. Он обслуживает его байтами. Проблема в том, что я не могу искать/пропускать видео. Я попытался найти во всем потоке stackover и Google, чтобы найти ответ, но я подошел короткий ..GoLang - поиск видео (служит в виде байтов)

Вот мой код:

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) 
} 

Кто-нибудь есть ответ на то, как поиск работы в golang?

Thanks, Отличный день!

ответ

5

Самый простой способ потокового видео MP4 на Go с поиском поддержки является

package main 

import (
    "net/http" 
) 

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

И видео будет доступно в 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) 
} 

Если вам нужно что-то еще гибкий, вы должны реализовать свой собственный сервер progressive streaming.

В вашем коде вы забыли добавить и обработать Range3/Accept-Range заголовки, поэтому ни FF, ни Chrome не показывают вам строку поиска, но в любом случае я не думаю, что хранить весь файл MP4 в памяти - хорошая идея.