91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

go后端利用ffmpeg轉hls做簡單視頻直播的方法

發布時間:2022-04-29 09:07:42 來源:億速云 閱讀:663 作者:iii 欄目:開發技術

本篇內容介紹了“go后端利用ffmpeg轉hls做簡單視頻直播的方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1. 前言

目前我們先測試一下ffmpeg轉hls播放的方式,看下延遲情況及兼容性情況,主要測試Windows、Linux和macOS中使用谷歌瀏覽器播放的情況。后端結合我們之前的cgo部分,建立一個簡單的http服務器,然后提供給前端調用。

2. wsl安裝ffmpeg并轉換rtsp為hls

sudo apt-get install ffmpeg

可能報錯:

“E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/universe/f/flite/libflite1_2.1-release-3_amd64.deb Connection failed [IP: 91.189.88.142 80]”

解決辦法,可以選擇直接源碼編譯安裝:

wget https://ffmpeg.org/releases/ffmpeg-4.1.tar.bz2
tar -xjvf ffmpeg-4.1.tar.bz2
cd ffmpeg-4.1
sudo apt-get install yasm
./configure
make && sudo make install
ffmpeg -version

ffmpeg轉換rtsp為hls:

ffmpeg -i "rtsp://username:password@40.40.40.101/media/video1" -c copy -f hls -hls_time 2.0 -hls_list_size 0 -hls_wrap 15 "./test.m3u8"

3. 前后端示例代碼

3.1 后端go代碼

我們使用go創建簡單的http服務,然后利用ffmpg轉換hls提供給前端。

需要鑒權時rtsp地址前加上用戶名密碼時即可,比如rtsp://username:password@xxx,用戶名和密碼之間用:隔開,和原本的地址用@隔開。

main.go:

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

func Index(w http.ResponseWriter, r *http.Request) {
    content, _ := ioutil.ReadFile("./index.html")
    w.Write(content)
}

func main () {
    http.HandleFunc("/index", Index)
    http.Handle("/", http.FileServer(http.Dir(".")))
    go func() {
        http.ListenAndServe(":9000", nil)
    }()
    cmd := exec.Command("ffmpeg", "-i", "rtsp://admin:admin@40.40.40.101/media/video1", "-c", "copy", "-f", "hls", "-hls_time", "2.0", "-hls_list_size", "0", "-hls_wrap", "15", "./test.m3u8")
    var out bytes.Buffer
    var stderr bytes.Buffer
    cmd.Stdout = &out
    cmd.Stderr = &stderr
    err := cmd.Run()
    if err != nil {
        fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
        return
    }
    fmt.Println("Result: " + out.String())
}

3.2 前端代碼

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>前端播放m3u8格式視頻</title>
    <link href="https://vjs.zencdn.net/7.4.1/video-js.css" rel="external nofollow"  rel="stylesheet">
    <script src='https://vjs.zencdn.net/7.4.1/video.js'></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.15.0/videojs-contrib-hls.min.js" type="text/javascript"></script>
    <!-- videojs-contrib-hls 用于在電腦端播放 如果只需手機播放可以不引入 -->
</head>
<body>
<style>
    .video-js .vjs-tech {position: relative !important;}
</style>
<div>
    <video id="myVideo" class="video-js vjs-default-skin vjs-big-play-centered" controls preload="auto" data-setup='{}' style='width: 100%;height: auto'>
        <source id="source" src="http://localhost:9000/test.m3u8" type="application/x-mpegURL"></source>
    </video>
</div>
<!--<div class="qiehuan" >切換視頻</div>-->
</body>

<script>
    // videojs 簡單使用
    var myVideo = videojs('myVideo', {
        bigPlayButton: true,
        textTrackDisplay: false,
        posterImage: false,
        errorDisplay: false,
    })
    myVideo.play()
    var changeVideo = function (vdoSrc) {
        if (/\.m3u8$/.test(vdoSrc)) { //判斷視頻源是否是m3u8的格式
            myVideo.src({
                src: vdoSrc,
                type: 'application/x-mpegURL' //在重新添加視頻源的時候需要給新的type的值
            })
        } else {
            myVideo.src(vdoSrc)
        }
        myVideo.load();
        myVideo.play();
    }
    // var src = "./test.m3u8";
    // document.querySelector('.qiehuan').addEventListener('click', function () {
    //     changeVideo(src);
    // })
</script>

4. 結果及評估

運行后端代碼后訪問localhost:9000即可查看視頻,經測試延遲還是比較高的(我測試大致在5s-8s),如果要加上ptz控制的話沒有實時感恐怕比較怪異,只適合簡單的網絡直播之類的,不太在乎一定的延遲。

go后端利用ffmpeg轉hls做簡單視頻直播的方法

“go后端利用ffmpeg轉hls做簡單視頻直播的方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

互助| 南皮县| 浦东新区| 鸡东县| 勐海县| 兰坪| 琼结县| 德庆县| 奉新县| 安泽县| 林芝县| 兰考县| 龙游县| 措美县| 肥乡县| 麻栗坡县| 道真| 汝城县| 永登县| 肃南| 奎屯市| 乌兰浩特市| 建昌县| 璧山县| 灵台县| 巩留县| 鄯善县| 扬州市| 横峰县| 苏尼特右旗| 博兴县| 广德县| 上杭县| 奎屯市| 蓬溪县| 泸州市| 诸城市| 克什克腾旗| 朝阳市| 毕节市| 江阴市|