前言:这个服务主要用于一下项目里面的视屏在线预览。
第一点 下载FFmpge
网上很多,有很多说用 PHP-FFmpge 等其他的都是了一下很麻烦。这里我提供我用的
链接:https://pan.baidu.com/s/1s2wjRKvtyaeua-e4NjuOlw
提取码:yns6
这里有一篇有参考价值的博客 ,其他的好像帮助不大 参考
这里我要说一下这个哥们,后面说点有点坑,什么叫 “把刚才解压的文件bin文件夹下面的ffmpeg.exe放一个到web目录”,这句话正的是坑,搞得浪费一上午。
其实直接把下载好的文件放在项目目录下,使用的时候直接绝对路径 调用就行。
我这里以视屏截图为例,具体要推流什么的,晚上百度一大把。
$name = '123.rmvb';//图片名字
$from = "E:\web_hwf\\PHP\\05WJGL\\public\\uploads\\file\\20181129\\weiqian.mp4";//文件存放路径
$to = "E:\web_hwf\\PHP\\05WJGL\public\\uploads\\file\\20181129\\";//生成图片存放路径
$str = "E:\web_hwf\\PHP\\05WJGL\\vendor\\FFmpge\\bin\\ffmpeg.exe -i " . $from . " -y -f mjpeg -ss 3 -t 1 -s 740x500 " . $to . $name;//ffmpeg命令,具体啥意思可以百度
exec($str, $output);//执行上述语句
这里绝对路径实际开发的时候可以 使用PHP z自带的方法 获取 项目地址拼接好。
推流
$strMP4RTMP = "E:\web_hwf\\PHP\\05WJGL\\vendor\\FFmpge\\bin\\ffmpeg.exe -re -i " . $from . " -vcodec copy -acodec copy -b:v 800k -b:a 32k -f flv rtmp://localhost:1935/live/home" ;
这里 rtmp://localhost:1935/live/home ,需要peiz配置nginx 服务 ,记下来会说
拉流
ffplay.exe rtmp://localhost:1935/live/home
这里我们用 FFmpge 包下面 ,目录里面 会有一个拉流程序 ,用来测试效果。使用方式CMD 到该目录下。
E:\web_hwf\PHP\05WJGL\vendor\FFmpge\bin>ffplay.exe rtmp://localhost:1935/live/home
ffplay version N-92644-gfe0416f8a1 Copyright (c) 2003-2018 the FFmpeg developers
built with gcc 8.2.1 (GCC) 20181201
configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-lib
wolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --
nable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
libavutil 56. 24.101 / 56. 24.101
libavcodec 58. 41.102 / 58. 41.102
libavformat 58. 23.102 / 58. 23.102
libavdevice 58. 6.101 / 58. 6.101
libavfilter 7. 46.101 / 7. 46.101
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
libpostproc 55. 4.100 / 55. 4.100
Input #0, flv, from 'rtmp://localhost:1935/live/home': 0B f=0/0
Metadata:
Server : NGINX RTMP (github.com/arut/nginx-rtmp-module)
displayWidth : 1280
displayHeight : 720
fps : 25
profile :
level :
Duration: 00:00:00.00, start: 7.301000, bitrate: N/A
Stream #0:0: Data: none
Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp, 128 kb/s
Stream #0:2: Video: h264 (High), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 2856 kb/s, 25 fps, 25 tbr, 1k tbn, 50 tbc
SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can't initialize audio client: 灏氭湭璋冪敤 CoInitialize銆?
SDL_OpenAudio (1 channels, 44100 Hz): WASAPI can't initialize audio client: 灏氭湭璋冪敤 CoInitialize銆?
No more combinations to try, audio open failed
263.35 M-V: -0.018 fd= 2 aq= 0KB vq= 0KB sq= 0B f=0/0
拉流和推流成功了,可是视屏播放卡顿....这就比较尴尬。
这里卡顿播放器的问题。这里用一个HTML 页面接收一下来测试。这样看起来是不是还可以
<html>
<head>
<title>视频直播</title>
<meta charset="utf-8">
<link href="http://vjs.zencdn.net/5.5.3/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"
poster="http://ppt.downhot.com/d/file/p/2014/08/12/9d92575b4962a981bd9af247ef142449.jpg" data-setup="{}">
<source src="rtmp://localhost:1935/live/home" type="rtmp/flv">
<!-- 如果上面的rtmp流无法播放,就播放hls流 -->
<!-- <source src="http://10.10.5.119/live/livestream.m3u8" type='application/x-mpegURL'> -->
<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.5.3/video.js"></script>
</body>
</html>
第二 Nginx 服务器搭建
我是windows 系统 这里要说明的一点是,Nginx 版本很多,要下对版本。我这里提供我使用的版本
链接:https://pan.baidu.com/s/1qKskgZ5JMIgW_5Eg6pnjEQ
提取码:t717
直接解压出来,启动可以直接点击文件根目录下的 nginx.exe 。在conf文件夹下面 有nginx.conf 配置文件 ,这里我已经配置好了测试版本 。
重点 启动 的效果
会看到黑窗口一闪而过,这里就需要在CMD里面验证一下是否启动成功
F:\nginx-1.7.11.3-Gryphon>nginx -s stop
F:\nginx-1.7.11.3-Gryphon>start nginx
F:\nginx-1.7.11.3-Gryphon>tasklist /fi "imagename eq nginx.exe"
映像名称 PID 会话名 会话# 内存使用
========================= ======== ================ =========== ============
nginx.exe 3896 Console 1 7,396 K
nginx.exe 14740 Console 1 10,620 K
nginx.exe 15492 Console 1 10,580 K
这里说明一下 第一行 nginx -s stop tinz 停止服务
第二行 start nginx 启动服务 ,我这里使用的是命令启动的
第三行 tasklist /fi "imagename eq nginx.exe" 判断是否启动成功
如果显示下面的那个这个表格就是启动成功了。