Golang dan FFmpeg: Melaksanakan teknologi push untuk penstriman langsung dalam talian memerlukan contoh kod khusus
Abstrak:
Dengan Internet populariti siaran langsung, semakin ramai pembangun memberi perhatian kepada cara melaksanakan teknologi tolak media penstriman. Artikel ini akan memperkenalkan cara menggunakan Golang dan FFmpeg untuk merealisasikan dorongan media penstriman langsung dalam talian. Melalui contoh kod khusus, pembaca akan dibimbing langkah demi langkah untuk memahami cara membina sistem tolak berdasarkan Golang dan FFmpeg.
1 Pengenalan kepada bahasa Golang
Golang ialah bahasa pengaturcaraan sumber terbuka yang dibangunkan oleh Google Ia memudahkan proses pengaturcaraan, menyediakan prestasi serentak yang cekap dan mudah dipelajari. Salah satu ciri Golang ialah ia sangat boleh dikembangkan, ia boleh membenamkan kod C/C++ dengan mudah dan berinteraksi dengan bahasa pengaturcaraan lain.
2. Pengenalan kepada FFmpeg
FFmpeg ialah rangka kerja multimedia yang berkuasa yang boleh melaksanakan operasi seperti pengekodan, penyahkodan, transkod, pemprosesan dan penstriman audio dan video. Dalam bidang media penstriman, FFmpeg digunakan secara meluas dalam siaran langsung, rakaman dan transcoding.
3 Persediaan
Sebelum kita mula, kita perlu memasang Golang dan FFmpeg dan pastikan ia berfungsi dengan baik. Selain itu, anda juga perlu mengetahui beberapa pengetahuan pengaturcaraan rangkaian asas.
4. Media penstriman tolak
Untuk melaksanakan fungsi tolak siaran langsung dalam talian, kita perlu menggunakan Golang untuk membangunkan pelayan tolak yang mudah. Berikut ialah contoh kod:
package main import ( "io" "log" "net/http" "os/exec" ) func main() { http.HandleFunc("/", handleRequest) log.Fatal(http.ListenAndServe(":8080", nil)) } func handleRequest(w http.ResponseWriter, r *http.Request) { cmd := exec.Command("ffmpeg", "-i", "video.mp4", "-f", "flv", "rtmp://live.example.com/app/streamKey") outPipe, err := cmd.StdoutPipe() if err != nil { log.Fatal(err) } err = cmd.Start() if err != nil { log.Fatal(err) } go func() { _, err = io.Copy(w, outPipe) if err != nil { log.Fatal(err) } }() cmd.Wait() }
Dalam kod di atas, kami menggunakan fungsi http.HandleFunc
untuk mengendalikan permintaan HTTP dan menggunakan exec.Command
Berfungsi untuk mencipta proses FFmpeg untuk menolak fail video ke pelayan penstriman RTMP yang ditentukan. Fungsi cmd.StdoutPipe
digunakan untuk mendapatkan aliran keluaran proses FFmpeg dan menulisnya ke http.ResponseWriter
. http.HandleFunc
函数来处理HTTP请求,并使用exec.Command
函数来创建一个FFmpeg进程,用于将视频文件推送到指定的RTMP流媒体服务器上。cmd.StdoutPipe
函数用于获取FFmpeg进程的输出流,并将其写入到http.ResponseWriter
。
五、开启推送服务器
保存上述代码为main.go
文件,并通过以下命令来运行服务器:
go run main.go
此时,推送服务器将开始运行,并监听来自客户端的HTTP请求。每当有一个HTTP请求到达时,FFmpeg进程将被启动,并将视频文件内容推送到指定的RTMP流媒体服务器上。
六、推送流媒体的注意事项
在实际的应用中,还需要注意以下几点:
rtmp://live.example.com/app/streamKey
main.go
dan jalankan pelayan melalui arahan berikut: 6. Langkah berjaga-jaga untuk menolak media penstriman
Dalam aplikasi sebenar, anda juga perlu memberi perhatian kepada perkara berikut:
Pastikan laluan pemasangan of FFmpeg is correct , dan dikonfigurasikan dengan betul dalam pembolehubah persekitaran sistem.
rtmp://live.example.com/app/streamKey
dengan alamat pelayan penstriman sebenar dan kod tolak. Atas ialah kandungan terperinci Golang dan FFmpeg: Teknologi tolak untuk media penstriman langsung dalam talian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!