cari
Rumahpembangunan bahagian belakangGolangCara melaksanakan protokol HLS menggunakan bahasa Go

HLS, Penstriman Langsung HTTP, ialah protokol penstriman video yang dicadangkan oleh Apple. Dalam platform lain, protokol HLS juga boleh digunakan untuk menghantar strim video Contohnya, pada platform Android, Google ExoPlayer turut menyokong memainkan strim video HLS. Protokol HLS terutamanya memotong fail video asal kepada satu siri fail kecil. Fail kecil ini dipanggil segmen. Serpihan ini perlu dikodkan ke dalam format pengekodan yang sepadan, seperti H.264. Pelanggan akan mendapatkan siri serpihan ini melalui protokol HTTP. Apabila pelanggan mendapat serpihan, ia mula memainkan serpihan itu. Apabila segmen ini dimainkan, pelanggan akan memperoleh segmen seterusnya dan memainkannya. Dengan cara ini, video lengkap boleh dimainkan.

Bahasa Go ialah bahasa yang sangat mudah, cekap dan sangat sesuai untuk pengaturcaraan serentak. Dalam bahasa Go, melaksanakan protokol HLS adalah sangat mudah. Dalam artikel ini, kami akan memperkenalkan cara melaksanakan protokol HLS menggunakan bahasa Go.

Pertama, kita perlu membina beberapa kod pelayan HTTP asas. Bahagian kod ini sangat mudah Kami hanya perlu mencipta pelayan HTTP dengan alamat pendengaran dan port. Apabila klien mengakses pelayan, ia boleh mendapatkan fail pada pelayan dan mengembalikan kandungan fail kepada klien.

package main

import (
    "io/ioutil"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        data, _ := ioutil.ReadFile("example.mp4")
        w.Write(data)
    })

    http.ListenAndServe(":8000", nil)
}

Dalam kod ini, kami mencipta pelayan HTTP mendengar pada port 8000. Apabila pelanggan mengakses pelayan ini, ia mengembalikan kandungan fail example.mp4 kepada klien.

Seterusnya, kita perlu menulis beberapa kod untuk melaksanakan penghirisan protokol HLS. Bahagian kod ini sangat kritikal. Teras keseluruhan protokol HLS adalah untuk memotong fail video kepada banyak serpihan kecil, dan kemudian menghantar serpihan ini kepada pelanggan melalui protokol HTTP. Kita perlu menulis kod untuk melaksanakan fungsi ini.

package main

import (
    "bytes"
    "fmt"
    "io/ioutil"
    "net/http"
    "os"
    "os/exec"
    "path/filepath"
)

func main() {

    // 执行 ffmpeg 命令将 example.mp4 文件切割成小的分片
    segmentDir := "segment"
    if _, err := os.Stat(segmentDir); os.IsNotExist(err) {
        os.Mkdir(segmentDir, os.ModePerm)
    }

    cmd := exec.Command("ffmpeg", "-i", "example.mp4", "-profile:v", "baseline", "-level", "3.0", "-start_number", "0", "-hls_time", "10", "-hls_list_size", "0", "-f", "hls", filepath.Join(segmentDir, "out.m3u8"))
    err := cmd.Run()
    if err != nil {
        fmt.Println("exec cmd failed")
        panic(err)
    }

    // 启动 HTTP 服务器用于客户端获取切片文件
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

        if r.URL.Path == "/out.m3u8" {

            // 获取 m3u8 文件的内容,此文件是一个播放列表,里面包含了可以播放的 ts 文件的序列
            data, _ := ioutil.ReadFile(filepath.Join(segmentDir, "out.m3u8"))
            w.Write(data)

        } else if len(r.URL.Path) > len("/segment/") && r.URL.Path[0:9] == "/segment/" {

            // 如果客户端要求播放某个 ts 文件,那么我们就需要从本地文件系统读取这个文件并且返回给客户端
            data, _ := ioutil.ReadFile(filepath.Join(segmentDir, r.URL.Path[1:]))
            http.ServeContent(w, r, "", 0, bytes.NewReader(data))

        }

    })

    // 启动 HTTP 服务器
    http.ListenAndServe(":8000", nil)
}

Dalam kod ini, kami terutamanya menggunakan pakej os/exec bahasa Go untuk melaksanakan arahan luaran. Ia akan memulakan proses Shell dan melaksanakan arahan yang sepadan. Dalam contoh ini, kami menggunakan arahan ffmpeg untuk memotong fail example.mp4 kepada beberapa bahagian kecil dan menyimpan bahagian ini ke direktori segment. Kemudian, kami boleh menyediakan serpihan ini kepada klien untuk main balik melalui protokol HTTP.

Apabila pelanggan meminta /out.m3u8, kami akan terus mengembalikan senarai serpihan kepada pelanggan. Apabila pelanggan meminta /segment/xxx, kita perlu membaca serpihan yang sepadan pada sistem fail tempatan dan mengembalikannya kepada klien.

Akhir sekali, kami berjaya melaksanakan protokol HLS menggunakan bahasa Go. Kesederhanaan dan kecekapan bahasa Go sangat sesuai untuk senario aplikasi sedemikian yang memerlukan konkurensi tinggi dan daya pemprosesan yang tinggi. Jika anda mendapat peluang, pastikan anda cuba melaksanakan protokol HLS dalam Go.

Atas ialah kandungan terperinci Cara melaksanakan protokol HLS menggunakan bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Menguasai GO Strings: menyelam mendalam ke dalam pakej 'rentetan'Menguasai GO Strings: menyelam mendalam ke dalam pakej 'rentetan'May 12, 2025 am 12:05 AM

Anda harus mengambil berat tentang pakej "Strings" di GO kerana ia menyediakan alat untuk mengendalikan data teks, splicing dari rentetan asas hingga pemadanan ekspresi biasa yang maju. 1) Pakej "Strings" menyediakan operasi rentetan yang cekap, seperti fungsi gabungan yang digunakan untuk meresap rentetan untuk mengelakkan masalah prestasi. 2) Ia mengandungi fungsi lanjutan, seperti fungsi ContainSany, untuk memeriksa sama ada rentetan mengandungi set aksara tertentu. 3) Fungsi ganti digunakan untuk menggantikan substrings dalam rentetan, dan perhatian harus dibayar kepada perintah penggantian dan kepekaan kes. 4) Fungsi perpecahan boleh memecah rentetan mengikut pemisah dan sering digunakan untuk pemprosesan ekspresi biasa. 5) Prestasi perlu dipertimbangkan semasa menggunakan, seperti

Pakej 'Pengekodan/PerduaPakej 'Pengekodan/PerduaMay 12, 2025 am 12:03 AM

"Pengekodan/binari" PacketingoisessentialforhandlingbinaryData, menawarkanToolSforreadingandWritingBinaryDatafiently.1) itsupportsbothlittle-endianandbig-endianbyteorders, crucialforcross-sistempatibility.2) thePackAgeAlAgeAllowSworksworks

Pergi Byte Slice Manipulasi Tutorial: Menguasai Pakej 'Bytes'Pergi Byte Slice Manipulasi Tutorial: Menguasai Pakej 'Bytes'May 12, 2025 am 12:02 AM

Menguasai pakej bait di GO boleh membantu meningkatkan kecekapan dan keanggunan kod anda. 1) Pakej bait adalah penting untuk parsing data binari, memproses protokol rangkaian, dan pengurusan memori. 2) Gunakan bytes.buffer untuk secara beransur -ansur membina irisan byte. 3) Pakej bait menyediakan fungsi mencari, menggantikan dan segmen kepingan byte. 4) Jenis bait. 5) Pakej Bytes berfungsi dengan kerjasama pemungut sampah Go, meningkatkan kecekapan pemprosesan data besar.

Bagaimana anda menggunakan pakej 'Strings' untuk memanipulasi rentetan di GO?Bagaimana anda menggunakan pakej 'Strings' untuk memanipulasi rentetan di GO?May 12, 2025 am 12:01 AM

Anda boleh menggunakan pakej "Strings" dalam pergi untuk memanipulasi rentetan. 1) Gunakan rentetan.Trimspace untuk mengeluarkan aksara ruang putih di kedua -dua hujung rentetan. 2) Gunakan rentetan.split untuk memecah rentetan ke dalam kepingan mengikut pembatas yang ditentukan. 3) Gabungkan kepingan rentetan ke dalam satu rentetan melalui string.join. 4) Gunakan strings.Contains untuk memeriksa sama ada rentetan mengandungi substring tertentu. 5) Gunakan Strings.ReplaceAll untuk melakukan penggantian global. Perhatikan prestasi dan perangkap yang berpotensi apabila menggunakannya.

Cara Menggunakan Pakej 'Bytes' untuk memanipulasi kepingan byte di Go (langkah demi langkah)Cara Menggunakan Pakej 'Bytes' untuk memanipulasi kepingan byte di Go (langkah demi langkah)May 12, 2025 am 12:01 AM

TheBytespackageingoishyffectiveForbytesLiceManipulation, menawarkanFunctionsforsearching, splitting, aconing, andbuffering.1) usebytes.containstosearchforbyTesequences.2) bytes.splithelpsbreakdownbytesliceslicesingdelimiter.3)

Pakej Bytes: Apakah alternatifnya?Pakej Bytes: Apakah alternatifnya?May 11, 2025 am 12:11 AM

Thealternativestogo'sbytespackageincludethestringspackage, bufiopackage, andcustomstructs.1) thespackagecanbeusedforbytemanipulationbyconvertytestoStringsandback.2) theBufiopackageisidealforhandlarlarglyreamsofbysofbysoFbySoMsoMlyReMsoMsoMsoMsoMlySoMsoMlySoMsofByTreamsofByTreamsofByTreamSoMsoMsoMsofByTreamSoMsoMsoMsoMsoMsoMsoMsoMsoMsoMsoMsoMsoMsoMsoMsoMsoMsoMsoMsoMsoMsoMsOreSofBySoRAm

Memanipulasi kepingan bait di Go: Kuasa Pakej 'Bytes'Memanipulasi kepingan bait di Go: Kuasa Pakej 'Bytes'May 11, 2025 am 12:09 AM

"Bytes" PacketingoisessentialficientlyManipulatingByteslices, CrucialForbinaryData, NetworkProtocols, danFilei/O.itoffersFunctionsLikeIndexforsearching, BufferForhandlingLargedataSets, Readerforsimulatingstreamreaming, danJoinForeShipseReading, danJoinForeFreameReading

Pakej GO Strings: Panduan Komprehensif untuk Manipulasi StringPakej GO Strings: Panduan Komprehensif untuk Manipulasi StringMay 11, 2025 am 12:08 AM

Go'sstringspackageiscrucialforefficientstringstringManipulation, affilingToolSlikestrings.split (), strings.join (), strings.replaceall (), andstrings.contains ()

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular