ffmpeg+nginx+video.js实现推流网页播放

最近研究了下m3u8视频流推送问题,记录下。

主要用到工具为ffmpeg+nginx+video.js,其中video只是用来实现网页播放。ffmpeg安装我参考的是https://blog.csdn.net/qq_39516859/article/details/81843419。不复杂,添加下环境变量就成。

如图,在cmd输入ffmpeg,这样就是安装成功了。

ffmpeg其他命令我就不说了,毕竟不是主要玩这个。我只用到了推流命令

ffmpeg -i "m3u8地址" -c:v copy -c:a aac -b:a 320k -ar 44100 -strict -2 -f flv "rtmp://127.0.0.1:1935/live"

也不过多赘述,m3u8地址我自己是用的虎牙直播来测试的。网上大多数测试地址都失效,或者就是慢。虎牙直播地址怎么获取稍后说。介绍下上面命令,需要关注的是rtmp://127.0.0.1:1935/live,这个是自己推流地址。我是想本地测所以用的127.0.0.1,也可以推送到哔哩哔哩或者其他直播网站,后面用对应平台的rtmp地址就行。如图,哔哩哔哩的为两个拼接

flv则是推流的视频格式。推流到其他平台很简单,到这就完成了。但是本地的话还需要工具nginx。

先说说nginx的配置,D:\Program Files\nginx1.7\conf路径下的nginx.conf。用记事本或者代码编辑器打开,新增配置。我的配置如下

rtmp{
	server{
	listen 1935;

		application live{
		live on;
		record off;
		}
		application hls{
		live on;
		hls on;
		hls_path nginx-rtmp-module/hls;
		hls_cleanup off;
		}
	}
}

其中1935端口可以自行改变,rtmp默认为1935。live则是端口后面。。。暂且称为项目名吧。其中需要关注的是hls_path nginx-rtmp-module/hls;这个东东,常规下载管网安装的nginx是不支持rtmp的。会报错,没记错是不识别rtmp。那是因为没有集成nginx-rtmp-module这个模块,这样直接cmd输入ffmpeg推流命令会报rtmp://localhost:1935/live  I/O error。

我用的已经上传,需要的自己下支持rtmp的nginx1.7。这个需要积分,有的大佬希望能施舍点,5积分不多。我也提供百度云链接,毕竟我也深受没有积分的痛苦。

下载解压,配置环境变量。

接着启动nginx就行,网页访问127.0.0.1出现如图代表成功

 

 

准备工作做好了。接下来获取m3u8,我用的虎牙直播的。打开虎牙直播,网页源代码。接着搜索sHlsUrl和sStreamName

拼接:http://al.hls.huya.com/backsrc/1199518199908-1199518199908-5249842996685307904-2399036523272-10057-A-0-1.m3u8

获取到url,执行

ffmpeg -i "http://aldirect.hls.huya.com/backsrc/31618642-31618642-135801033333932032-734400720-10057-A-0-1.m3u8" -c:v copy -c:a aac -b:a 320k -ar 44100 -strict -2 -f flv "rtmp://127.0.0.1:1935/live"

这就是推流成功了,但是咱们还需要直观清晰的看不是,所以我准备写个html页面播放。恩,video.js这个大坑,我就踩下去了。video.js是可以播放推流的。知道video这个插件既可以直接播放m3u8格式(不考虑跨域问题),也可以播放flv格式。废话不多说上我的html代码

<html>  
  <head>  
  <title>视频直播</title>  
  <meta charset="utf-8">  
  <link href="http://vjs.zencdn.net/5.8.8/video-js.css" rel="stylesheet">  
  <!-- If you'd like to support IE8 -->  
  <script src="http://vjs.zencdn.net/ie8/1.1.1/videojs-ie8.min.js"></script>  
</head>  
<body>  
  <h1>直播间</h1>  
 <video id="my-video" class="video-js" controls preload="auto" width="640" height="300" data-setup="{}">  
    <source src="rtmp://127.0.0.1:1935/live/" type="rtmp/flv">   
    <p class="vjs-no-js">播放视频需要启用 JavaScript,推荐使用支持HTML5的浏览器访问。  
      To view this video please enable JavaScript, and consider upgrading to a web browser that  
      <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>  
    </p>  
 </video>  
 <script src="http://vjs.zencdn.net/5.8.8/video.js"></script>  
</body>  
</html> 

必须注意的是video的版本不能太高,我用的5.8.8版本。之前版本是7.2,不管怎么样都不成功。还有就是得打开flash插件,这个不支持h5直接播放。

最后就是,有错误请指出,但是别喷。我就一小白

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
FFmpeg是一个开源的多媒体处理工具,可以用于录制、转码和处理音视频文件。Nginx是一个快速、可靠、高性能的Web服务器,同时也可用作反向代理服务器等。 结合FFmpegNginx,可以实现视频推流功能。具体步骤如下: 1. 配置Nginx服务器:首先需要在Nginx服务器上进行一些配置。通过编辑Nginx的配置文件,在http模块下添加rtmp模块,并设置rtmp监听的端口和应用的名称。 2. 安装FFmpeg:在推流前需要确保系统中已安装FFmpeg。如果没有安装,可以通过官方网站下载并安装对应的版本。 3. 配置FFmpeg推流:打开命令行终端,输入ffmpeg命令,并根据所需参数配置推流的源文件、输出地址、编码相关参数等。通过命令行输入ffmpeg -i 输入文件地址 -vcodec xxx -acodec xxx -f flv 输出地址 进行推流操作。 4. 启动Nginx服务器:操作系统中启动Nginx服务器,这样可以通过提供的rtmp地址进行推流。 5. 建立推流连接:在推流端使用支持RTMP协议的软件工具,如OBS Studio等,配置正确的推流地址,并开始推流。 此时,FFmpeg会将推流的音视频数据传输给Nginx服务器上的RTMP模块进行处理和转发。 总结来说,通过FFmpegNginx的配合,我们可以实现视频推流功能。FFmpeg负责编码推流的数据,而Nginx负责接收和转发数据。这种方式结合了FFmpeg灵活的音视频处理能力和Nginx优越的网络传输性能,使得推流过程更加稳定和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值