【发布时间】:2017-04-08 20:49:55
【问题描述】:
我正在尝试流式传输 AES 加密的视频文件;但是我们需要在通过 http 流式传输之前动态解密它
如何将解密数据的输出写入http writer
package main
import (
"crypto/aes"
"crypto/cipher"
"io"
"log"
"net/http"
"os"
)
var key []byte = []byte("yourAESPrivateKey")
func ServeHTTP(w http.ResponseWriter, r *http.Request) {
inFile, err := os.Open("2.ts")
if err != nil {
log.Fatal(err)
}
defer inFile.Close()
block, err := aes.NewCipher(key)
if err != nil {
log.Fatal(err)
return
}
var iv [aes.BlockSize]byte
stream := cipher.NewOFB(block, iv[:])
w.Header().Set("Content-type", "video/mp4")
writer := &cipher.StreamWriter{S: stream, W: w}
if _, err := io.Copy(writer, inFile); err != nil {
log.Fatal(err)
return
}
//http.ServeContent(w, r, "video.mp4", time.Now(), inFile)
}
func main() {
http.HandleFunc("/", ServeHTTP)
http.ListenAndServe(":2020", nil)
}
【问题讨论】:
-
有人反对我,为什么?
-
因为即使你做了解密,它也不行。你可以只读取一个 ts,解密它并告诉浏览器它的 mp4。你需要转换成可流式的分片格式,生成清单等。
-
你的解密有问题吗?你的流媒体有问题吗?您预计会发生什么以及实际会发生什么?
-
解密没问题,我的问题是:“如何将解密数据的输出写入http.ResponseWriter”
标签: go video-streaming aes