以下是一个使用 Golang 编写的简单示例,只实现接收和转发 MPEG-TS 格式流的 HTTP 服务器:
package main
import (
"log"
"net/http"
"os/exec"
)
func handleLiveStream(w http.ResponseWriter, r *http.Request) {
cmd := exec.Command("ffmpeg", "-f", "v4l2", "-s", "1920x1080", "-i", "/dev/video1", "-vcodec", "libx264", "-f", "mpegts", "http://0.0.0.0:8001/live.mpg")
err := cmd.Start()
if err != nil {
log.Println(err)
return
}
defer cmd.Wait()
log.Println("Live streaming started")
w.WriteHeader(http.StatusOK)
}
func main() {
http.HandleFunc("/live.mpg", handleLiveStream)
log.Println("HTTP server started on port 8001")
err := http.ListenAndServe(":8001", nil)
if err != nil {
log.Fatal(err)
}
}
这段代码中,在 handleLiveStream
处理函数中,它启动了一个 ffmpeg 命令,并将 /dev/video1
的视频输入通过 -f v4l2 -s 1920x1080 -i /dev/video1
参数进行采集。然后,使用 -vcodec libx264 -f mpegts
将采集到的视频编码为 MPEG-TS 格式并输出到 http://0.0.0.0:8001/live.mpg
。
在 main
函数中,我们注册了 /live.mpg
路径的处理函数,并监听 8001 端口启动了 HTTP 服务器。当有客户端访问 http://localhost:8001/live.mpg
时,就会执行 handleLiveStream
函数来处理请求。
请注意,在实际应用中需要根据需求进行适当的修改和优化。同时,对于安全性、错误处理、并发性等方面也需要进行更加严谨的考虑和处理。
内容由零声教学AI助手提供,问题来源于学员提问