推流的h5播放只能使用rtmp协议,拉流可以使用rtmp协议和hls协议。rtmp协议是adobe开发的开放协议,hls是apple推出的直播协议。我们使用nginx的rtmp插件搭建一个流媒体服务器。基于nginx的rtmp直播服务器,安装加载nginx-rtmp-module模块的nginx。首先,下载nginx到https://github.com/arut/nginx-rtmp-module下载rtmp模块(gitclonehttps://github.com/arut/nginx-rtmp-module.git)解压nginx和rtmp模块分开,以便它们位于同一目录中。编译nginx./configure--prefix=/usr/local/nginx--add-module=../nginx-rtmp-module.1.1.4--with-http_ssl_modulemake&&makeinstall安装配置rtmp模块rtmp{server{听9999;applicationmyapp{继续;}应用程序直播{直播;#开启实时hlson;#打开hlshls_path/usr/local/etc/nginx/html/multimedia/hls;#hlsts切片存放路径hls_fragment2s;#局部切片长度hls_playlist_length6s;#HLS播放列表长度}}}使用rtmp协议,监听9999端口,如果我们的推流地址填写为rtmp://ip:9999/myapp,那么就是纯rmtp协议如果推流地址为rmtp://ip:9999/live,然后推流后,很多ts格式的视频片段和m3u8格式的A文件,如果我们要用http协议访问这个m3u8文件,需要重新配置http模块。配置http模块位置/live{types{application/vnd.apple.mpegurlm3u8;视频/mp2tts;}别名/usr/local/etc/nginx/html/multimedia/hls/;add_header缓存控制无缓存;当我们的推流地址填写为rtmp://ip:9999/live/room1时,使用http://ip:80/live/room1.m3u8将rtmp转hls即可访问直播。新建文件夹mkdir-p/usr/local/etc/nginx/html/multimedia/hls/restartnginxnginx-sreload以上就完成了直播服务器的搭建。使用video.js在h5上播放rtmp,使用obs推流。推送地址可以填写rtmp://ip:9999/myapp或者rtmp://ip:9999/live。如果使用rtmp://ip:9999/myapp,在h5端播放的时候,会涉及到h5播放rtmp协议的问题。在h5上安装vide.js后,需要额外安装videojs-flash插件。video.js版本为7.8.3。安装后在相关页面导入:importvideojsfrom'video.js';import"videojs-flash"import'video.js/dist/video-js.css'然后初始化videojs:player=videojs("myVideo",{poster:baseUrl+'/file/download?file_id='+that.props.videos.foreImg,controls:true,preload:'auto',//fluid:false,fill:true,playsinline:true,languages:'en',suppressNotSupportedError:false,来源:that.props.videos.url,techOrder:['flash','html5']})PC端播放rtmp依赖flash播放器,所以需要开启flash,解决了pc端rtmp协议直播的问题。但问题是现在手机直播流行,而苹果一直不支持flash播放器,所以目前正常的方法无法解决移动端使用rtmp协议拉流的问题。移动端使用rtmp协议拉流,因为苹果不支持flash,所以用rtmp拉流是肯定不行的,但是可能客户只给了我们rtmp协议,那我们可以用上面的另一个地址转换rtmp协议转hls协议。将ffmpegrtmp构建为flvffmpeg-re-irtmp://ip:9999/myapp/room1-vcodeclibx264-vprofilebaseline-acodeclibmp3lame-ar44100-ac1-fflvrtmp://ip:9999/live/room1当客户给的推流地址是rtmp://ip:9999/myapp/room1,可以用ffmpeg转成http://ip:9999/live/room1.m3u8在所有平台播放。但是这样还是有一个问题,因为如果客户给地址,用户从客户平台拉流,但是如果你用自己的服务器中转,就变成了用户从我们自己的服务器拉流。如果用户比较多的话,那么就要考虑带宽的问题。
