赞
踩
一:简述
本文将描述如何使用livego配合flv.js 和hls.js 实现无插件的播放视频流。可以同时支持安卓、ios、PC端浏览器拉流。本示例所有的执行结果是windows下试验的。flvjs和hlsjs需要使用谷歌浏览器或者360浏览器极速模式可以访问。文章如有错误或者有什么更好的方式望大佬们指出相互学。感谢各位贡献出源码的大佬们。
二:环境准备
下载livego。编译好二进制文件下载路径https://github.com/gwuhaolin/livego/releases
下载flv的js和hls的js文件,下图是我上传的资源文件的目录结构。是我们需要用到的一些文件 下载
下载编译好的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
下载完成后,解压文件。源码的目录结构如下。将源代码放置
GOPATH所在目录下的src目录。使用goland的编辑器。会自动识别src目录下的代码。
2. livego的源码导入的包很多是引入了gitbug上面的包。如果编译不能找到对应的包的话。可以将github上的导入包修改指定导入本地的包。导入包的目录是以GOPATH目录下的src目录为开始目录。所以目录结构应该是从livego/开始。可以按照此方式修改到本地。需改修改的地方很多,可以根据编译错误提示修改。修改完成后直接编译就可以了。或者使用命令行到对应目录下执行 go build livego.go 命令。
3.
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库
使用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
可以先使用ffplay去播放三种视频流。确定视频流是否已经推送到livego中。我资源文件中都上传了对应的bat执行命令。双击即可。下图是我推送的一个本地文件,使用三种方式拉的视频流。可以看出hls的流明显比flv和rtmp的慢一些
五:使用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得参数细节这里不作描述。可以自己上网查询。
hls的js:修改index.html 15行
修改需要播放得hls视频得url。即可。苹果手机不需要js得支持。可以直接在原生得浏览器中输入http的流得地址即可播放。
谷歌浏览器播放flv的视频:
360浏览器极速模式播放flv的视频流:hls的流可以按照相应的方式修改。这里就不做详述了。
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。