当前位置:   article > 正文

live server插件怎么用_livego流媒体服务实现无插件播放视频(支持hls,flv)

livego flv缓慢

一:简述

本文将描述如何使用livego配合flv.js 和hls.js 实现无插件的播放视频流。可以同时支持安卓、ios、PC端浏览器拉流。本示例所有的执行结果是windows下试验的。flvjs和hlsjs需要使用谷歌浏览器或者360浏览器极速模式可以访问。文章如有错误或者有什么更好的方式望大佬们指出相互学。感谢各位贡献出源码的大佬们。

二:环境准备

  下载livego。编译好二进制文件下载路径https://github.com/gwuhaolin/livego/releases

  下载flv的js和hls的js文件,下图是我上传的资源文件的目录结构。是我们需要用到的一些文件 下载

97615145a29143973dd9a61e3d192a80.png

  下载编译好的livego可以实现推送rtmp的流转换成http的flv的视频流。但是再转换hls的视频流的地方有一个小bug。需要稍微改进一下。如果需要使用到hls的视频流。建议自己重新编译一下livego的源码。我自己重新编译了下livego的源码。可以直接  下载https://download.csdn.net/download/qq_37103755/11952381(如下载我编译好的文件。可以直接启动里面的程序。可以忽略livego源码编译部分)

三:编译livego源码

  1.下载livego源码   https://github.com/gwuhaolin/livego.git

4f5882ab2a32a9f522df6219e11ad36b.png

下载完成后,解压文件。源码的目录结构如下。将源代码放置

GOPATH所在目录下的src目录。使用goland的编辑器。会自动识别src目录下的代码。

36835b5a06e8844621eaa758746e0411.png

 2. livego的源码导入的包很多是引入了gitbug上面的包。如果编译不能找到对应的包的话。可以将github上的导入包修改指定导入本地的包。导入包的目录是以GOPATH目录下的src目录为开始目录。所以目录结构应该是从livego/开始。可以按照此方式修改到本地。需改修改的地方很多,可以根据编译错误提示修改。修改完成后直接编译就可以了。或者使用命令行到对应目录下执行  go  build   livego.go 命令。

c29e048e6efad6aedefb14c24379801a.png

3.

fcc90bf0b2e4d61fd5eb199f9ab962b3.png

4.在推送视频流到livego的过程中。一直都是直接使用没有细细研究过其中的代码。由于后来项目中需要在苹果手机中播放视频流。总是播放hls的视频流失败。而安卓手机使用hls的js可以播放。即使如此安卓手机使用hls的js播放视频流也很不稳定。有些视频流可以有些流又不可以。我一度怀疑是不是自己的视频流的格式推送的又问题。后来无奈只好调试livego的程序。发现浏览器在向livego的服务请求视频流的时候,解析hls的视频流的路径出现了一个小bug。这也是go语言的函数中的一个小bug。hls.go文件里面解析路径出现了错误。strings.TrimRight的出的问题。直接修改代码去除后缀。

修改代码如下:

源码目录:livego\protocol\hls\hls.go  155行。修改一个函数。还修改了hls的延迟时间修改为1s

key = strings.TrimRight(pathstr, path.Ext(pathstr)) 修改代码如下

key = strings.TrimSuffix(pathstr, path.Ext(pathstr))  

修改hls.go  18行。将duration 改为1000  减少hls的延迟

5.代码修改完成后,在使用命令go  build  livego就可以直接编译运行了。在goland的比编译器中直接运行。会提示找不到配置文件。因为livego需要读取配置文件livego.cfg.或者修改程序获取程序运行的当前路径。可以在编译器中直接运行。

四:使用ffmpeg推送视频流 

我上传的资源文件里面包含了ffmpeg库

e501e8044c47f4baee6bd7207c6613ca.png

 使用ffmpeg推送本地的视频文件到livego。需要提醒的是:livego默认读取的配置文件里面livego.cfg文件

{

    "server": [

    {

    "appname":"live",

    "liveon":"on",

    "hlson":"on"

    }

    ]

}

推送的视频流路径前缀必须是  rtmp://IP:1935/live/******.否在livego不识别该路径。可以根据自己需要手动改写这个appname的值。下面给出使用ffmpeg命令推送、拉流的命令:

推送本地的文件到livego:  双击pushvideofile.bat文件就可以直接推送视频流了。(需要先启动livego)

ffmpeg -re -i  %filepath%\video\Apache.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1:1935/live/stream

推送rtsp的流到livego:

ffmpeg -re  -rtsp_transport tcp -i "rtsp://admin:admin@IP:554/media/video1" -f flv -vcodec copy -vprofile baseline -acodec copy -ar 44100 -strict -2 -ac 1 -f flv  -q 10  "rtmp://101.132.162.72:1935/live/stream"

拉流路径:

RTMP:rtmp://localhost:1935/live/stream

FLV:http://127.0.0.1:7001/live/stream.flv

HLS:http://127.0.0.1:7002/live/stream.m3u8

cd031701af8ec56adafee43387972488.png

可以先使用ffplay去播放三种视频流。确定视频流是否已经推送到livego中。我资源文件中都上传了对应的bat执行命令。双击即可。下图是我推送的一个本地文件,使用三种方式拉的视频流。可以看出hls的流明显比flv和rtmp的慢一些

2406ac5d32572367e3458dfbdca9343e.png

五:使用flvjs和hlsjs播放视频流

成功推送视频流至livego中后。可以使用flvjs和hlsjs播放视频流。下面将使用谷歌浏览器和360浏览器极速模式获取的flv的视频流:

修改flvjs和hlsjs的demo中index.html对应的视频流的路径::

flv的js:修改index.html 67行对应得 url: 'http://127.0.0.1:7001/live/unv.flv', //<==自行修改

    修改需要播放得flv视频得url。flv.js得参数细节这里不作描述。可以自己上网查询。

9d0591bfc4181c87b1df359349cfa198.png

hls的js:修改index.html 15行

    修改需要播放得hls视频得url。即可。苹果手机不需要js得支持。可以直接在原生得浏览器中输入http的流得地址即可播放。

d6b4ad627d3d3aec9f3fc370a963b837.png

谷歌浏览器播放flv的视频:

8db5828db2486d90ef16b33bf3126ee9.png

360浏览器极速模式播放flv的视频流:hls的流可以按照相应的方式修改。这里就不做详述了。

99330ad5d410c2ccc205b5aa9e4247cc.png

2020-04-19:

uuid.go的源文件也需要更改

/utils/uid/uuid.go:9:18: multiple-value uuid.NewV4() in single-value context

将报错文件第9行

id := uuid.NewV4() 改成 id,_ := uuid.NewV4()

livego-0.0.5的版本不是很稳定。不推荐大家使用

————————————————

版权声明:本文为CSDN博主「越老越顽固」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_37103755/article/details/102870307

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/157557?site
推荐阅读
相关标签
  

闽ICP备14008679号