Golang AES在通过HTTP流式传输视频之前对其进行解密

Im trying to stream AES encrypted video file; however we need to decrypt it on the fly before streaming it though http

how to write the output of decrypted data to 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)
        }

i have enhanced my code

so if i requested an encrypted file, the server will decrypt it and serve it properly, however i have another problem as below

the problem now is that i get corrupted file if file exceeds certain size.

i have done some tests on text files for debugging purposes and so i can post data results here (big corrupted file) check the end of the file

package main

        import (
            "crypto/aes"
            "crypto/cipher"
            "log"
            "net/http"
            "os"
            "time"
        )

        type cipherHttpWriter struct {
            http.ResponseWriter
        }

        func (c cipherHttpWriter) Write(b []byte) (int, error) {
            var key []byte = []byte("we!@09bsa$.a-ala.HJOqweK45aghf&A")
            block, err := aes.NewCipher(key)
            if err != nil {
                return 0, err
            }
            var iv [aes.BlockSize]byte
            stream := cipher.NewOFB(block, iv[:])
            streamWriter := &cipher.StreamWriter{S: stream, W: c.ResponseWriter}
            defer streamWriter.Close()
            return streamWriter.Write(b)
        }

        func ServeHTTP(w http.ResponseWriter, r *http.Request) {
            inFile, err := os.Open(string(r.URL.Path[1:]))
            if err != nil {
                log.Fatal(err)
            }
            defer inFile.Close()
            writer := cipherHttpWriter{}
            writer.ResponseWriter = w

            http.ServeContent(writer, r, "", time.Now(), inFile)
        }

        func main() {
            http.HandleFunc("/", ServeHTTP)
            http.ListenAndServe(":2020", nil)
        }