广告
返回顶部
首页 > 资讯 > 精选 >go后端利用ffmpeg转hls做简单视频直播的方法
  • 923
分享到

go后端利用ffmpeg转hls做简单视频直播的方法

2023-06-30 11:06:15 923人浏览 安东尼
摘要

本篇内容介绍了“Go后端利用FFmpeg转hls做简单视频直播的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 前言目前我们先测试一

本篇内容介绍了“Go后端利用FFmpeg转hls做简单视频直播的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1. 前言

目前我们先测试一下ffmpeg转hls播放的方式,看下延迟情况及兼容性情况,主要测试windowslinuxMacOS中使用谷歌浏览器播放的情况。后端结合我们之前的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.bz2tar -xjvf ffmpeg-4.1.tar.bz2cd ffmpeg-4.1sudo apt-get install yasm./configuremake && sudo make installffmpeg -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做简单视频直播的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: go后端利用ffmpeg转hls做简单视频直播的方法

本文链接: https://www.lsjlt.com/news/328400.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • go后端利用ffmpeg转hls做简单视频直播的方法
    本篇内容介绍了“go后端利用ffmpeg转hls做简单视频直播的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 前言目前我们先测试一...
    99+
    2023-06-30
  • Go语言利用ffmpeg转hls实现简单视频直播
    目录1. 前言2. wsl安装ffmpeg并转换rtsp为hls3. 前后端示例代码3.1 后端go代码3.2 前端代码4. 结果及评估1. 前言 上一次我们找到一些开源方案,目前我...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作