安装环境,macos-10.13.4
nginx-1.12.2
1. 安装(可以用 brew 安装)
sudo brew install nginx
2. 查看 nginx 版本
nginx -v
3. 启动 nginx
sudo nginx
也可以使用下面的命令启动,但是配置文件nginx.conf修改后用这个命令执行不生效,故不建议使用:
sudo brew services start nginx
4. 查看 nginx 是否启动成功
在浏览器中访问 http://localhost:8080,如果出现如下界面,则说明启动成功.
这里写图片描述备注:端口号是在配置文件 nginx.conf 里面配置的,默认端口是 8080 ,配置文件的位置 /usr/local/etc/nginx
5. 关闭nginx
sudo nginx -s stop
也可以使用下面的命令启动,但是配置文件nginx.conf修改后用这个命令执行不生效,故不建议使用:
sudo brew services stop nginx
6. 重新加载nginx
sudo nginx -s reload
7. 可能遇到的问题
-
端口被占用
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
解决方法:修改 nginx.conf 文件里的端口号
-
权限不够
nginx: [alert] could not open error log file: open() “/usr/local/var/log/nginx/error.log” failed (13: Permission denied)
解决方法:在命令前加上 sudo,这时可能会要求输入密码,密码就是电脑的开机密码啦~
补充
安装 homebrew ,将以上命令粘贴至terminal,然后回车即可
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
一些问题的处理
如果你输入http://localhost:8080后能看到nginx配置的首页那说明OK。
或nginx -v看下版本号。都能确保装上.
下面是在挂装rtmp模块时出现的问题处理。
安装命令见:https://blog.csdn.net/leonpengweicn/article/details/44917943
安装tap时:brew tap homebrew/nginx 报was deprecated.
报下面这个错
Updating Homebrew...
==> **Auto-updated Homebrew!**
Updated 1 tap (homebrew/core).
==> **Updated Formulae**
abyss docker2aci libhttpseverywhere subversion
amqp-cpp emscripten mypy tup
chronograf grpc packmol znapzend
dnscrypt-proxy influxdb rancher-cli
Error: homebrew/nginx was deprecated. This tap is now empty as all its formulae were migrated.
并不那么顺利,根查原因是因为homebrew/nginx的git路径变了。因此后面找到一个denji/nginx的。
把命令改为 brew tap denji/nginx
fsh-mac--00-24-D6-72-E4-6A:~ fengsh$ brew tap denji/nginx
Updating Homebrew...
==> **Tapping denji/nginx**
Cloning into '/usr/local/Homebrew/Library/Taps/denji/homebrew-nginx'...
remote: Counting objects: 72, done.
remote: Compressing objects: 100% (72/72), done.
remote: Total 72 (delta 1), reused 28 (delta 0), pack-reused 0
Unpacking objects: 100% (72/72), done.
Tapped 62 formulae (162 files, 130.2KB)
装好这个本以为就可以直接装rtmp模块了。
直接装rtmp命令 : brew install nginx-full --with-rtmp-module
fsh-mac--00-24-D6-72-E4-6A:~ fengsh$ brew install nginx-full --with-rtmp-module
==> **Installing nginx-full from denji/nginx**
Error: Cannot install denji/nginx/nginx-full because conflicting formulae are installed.
nginx: because nginx-full symlink with the name for compatibility with nginx
Please `brew unlink nginx` before continuing.
Unlinking removes a formula's symlinks from /usr/local. You can
link the formula again after the install finishes. You can --force this
install, but the build may fail or cause obscure side-effects in the
resulting software.
又出问题了,denji的git下没有nginx-full?详细看错误有一句 please 'brew unlink nginx ' before continuing.
因此在执行装rtmp时先执行 brew unlink nginx 再来安装,最后成功了。
fsh-mac--00-24-D6-72-E4-6A:~ fengsh$ brew unlink nginx
Unlinking /usr/local/Cellar/nginx/1.13.12... 2 symlinks removed
fsh-mac--00-24-D6-72-E4-6A:~ fengsh$ brew install nginx-full --with-rtmp-module
Updating Homebrew...
==> **Installing nginx-full from denji/nginx**
==> **Installing dependencies for denji/nginx/nginx-full: ****rtmp-nginx-module**
==> **Installing denji/nginx/nginx-full dependency: ****rtmp-nginx-module**
==> **Downloading https://github.com/sergey-dryabzhinsky/nginx-rtmp-module/archive**
==> **Downloading from https://codeload.github.com/sergey-dryabzhinsky/nginx-rtmp-**
######################################################################## 100.0%
==> **Downloading https://github.com/sergey-dryabzhinsky/nginx-rtmp-module/compare**
######################################################################## 100.0%
==> **Patching**
==> **Applying v1.1.7.10...d25c56f.diff**
patching file .gitignore
patching file README.md
patching file config
patching file dash/ngx_rtmp_dash_module.c
patching file doc/README.md
patching file doc/directives.md
patching file hls/ngx_rtmp_hls_module.c
patching file hls/ngx_rtmp_mpegts.c
patching file hls/ngx_rtmp_mpegts.h
patching file hls/ngx_rtmp_mpegts_crc.c
patching file hls/ngx_rtmp_mpegts_crc.h
patching file ngx_rtmp.c
patching file ngx_rtmp_auto_push_module.c
patching file ngx_rtmp_cmd_module.h
patching file ngx_rtmp_codec_module.c
patching file ngx_rtmp_core_module.c
patching file ngx_rtmp_exec_module.c
patching file ngx_rtmp_handshake.c
patching file ngx_rtmp_live_module.c
patching file ngx_rtmp_live_module.h
patching file ngx_rtmp_netcall_module.c
patching file ngx_rtmp_notify_module.c
patching file ngx_rtmp_record_module.c
patching file ngx_rtmp_record_module.h
patching file ngx_rtmp_shared.c
patching file ngx_rtmp_version.h
配置文件 open /usr/local/etc/nginx 下的nginx.conf
**[plain]** [view plain](https://blog.csdn.net/fengsh998/article/details/79942775# "view plain")[copy](https://blog.csdn.net/fengsh998/article/details/79942775# "copy")
<embed id="ZeroClipboardMovie_1" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">
<embed id="ZeroClipboardMovie_2" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">
1. #user nobody;
2. worker_processes 1;
4. events {
5. worker_connections 1024;
6. }
9. http {
10. include mime.types;
11. default_type application/octet-stream;
13. sendfile on;
15. keepalive_timeout 65;
16. server {
17. listen 8080;
18. server_name localhost;
20. #charset koi8-r;
22. #access_log logs/host.access.log main;
24. location / {
25. root html;
26. index index.html index.htm;
27. }
29. #配置rtmp stat
30. location /stat {
31. rtmp_stat all;
32. rtmp_stat_stylesheet stat.xsl;
33. }
34. location /stat.xsl {
35. root /usr/local/Cellar/rtmp-nginx-module/1.1.7.11-dev_2/share/rtmp-nginx-module;
36. }
38. location /control {
39. rtmp_control all;
40. }
42. #HLS配置开始,这个配置为了`客户端`能够以http协议获取HLS的拉流
43. location /hls {
44. # Serve HLS fragments
45. types {
46. application/vnd.apple.mpegurl m3u8;
47. video/mp2t ts;
48. }
49. root html;
50. add_header Cache-Control no-cache;
51. }
52. #HLS配置结束
54. #error_page 404 /404.html;
56. # redirect server error pages to the static page /50x.html
57. #
58. error_page 500 502 503 504 /50x.html;
59. location = /50x.html {
60. root html;
61. }
62. }
66. include servers/*;
67. }
69. rtmp {
70. server {
71. listen 1935;
72. ping 30s;
73. notify_method get;
75. application myapp {
76. live on;
77. record off;
78. max_connections 1024;
79. }
81. #增加对HLS支持开始
82. application hls {
83. live on;
84. hls on;
85. hls_path /usr/local/var/www/hls;
86. hls_fragment 5s;
87. }
88. #增加对HLS支持结束
89. }
90. }
有关rtmp的配置项看这个:https://www.cnblogs.com/lidabo/p/7099501.html
配置好之后要记得 nginx -s reload 重新加载配置。
之后就可以使用ffmpeg+vlc 进行推流测试了。(经试推流过一段时间会有Broken pipe)还在百度中,希望能找到吧。
安装FFmpeg
1)利用上面的homebrew安装FFmpeg:
brew install ffmpeg
2)当命令结束之后,输入以下命令(查看你的安装ffmpeg的信息):
brew info ffmpeg
输出的结果如下:
image.png图片中有好多库,例如ffac,fontconfig,freetype等等,有红叉的代表是没有这个库,有绿色的对勾的表示此库已经安装上了。想要知道怎么安装其他的依赖库吗?就看下面命令行。
更新ffmpeg,输入以下命令行:
brew update
或者:
brew upgrade ffmpeg
安装某一个特定的库如下格式:
brew install [FORMULA...]
例如:安装openssl 库输入以下命令:
brew install openssl
image.png
卸载某个特定的库如下格式:
brew uninstall [FORMULA...]
例如:卸载openssl库输入以下命令:
brew uninstall openssl
推流测试
二、FFmpeg推流
1.推流MP4文件
-
视频文件地址:/Users/xu/Desktop/bangbangbang.mp4
-
acc:RTMP的音频格式
-
flv: RTMP的视频格式
ffmpeg -re -i /Users/xu/Desktop/bangbangbang.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/rtmplive/home
输入命令行后,暂时先不要点回车,等设置好本地拉流后,再进行推流。
2.本地拉流MP4文件
- 打开VLC播放器
- 设置播放地址
-
设置拉流地址
imagertmp://localhost:1935/rtmplive/home
-
开始推流,点击open后开始播放。
推流成功!
三、用ffmpeg推流桌面以及推流摄像头进行直播
1.如果希望将桌面录制或者分享,可以使用命令行如下:
ffmpeg -f avfoundation -i "1" -vcodec libx264 -preset ultrafast -acodec libfaac -f flv rtmp://localhost:1935/rtmplive/home
- 这个只能够推桌面。
2.如果需要桌面+麦克风,比如一般做远程教育分享 命令行如下:
ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/rtmplive/home
- 这个可以推桌面+麦克风。
3.如果需要桌面+麦克风,并且还要摄像头拍摄到自己,比如一般用于互动主播,游戏主播,命令行如下
ffmpeg -f avfoundation -framerate 30 -i "1:0" \-f avfoundation -framerate 30 -video_size 640x480 -i "0" \-c:v libx264 -preset ultrafast \-filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/rtmplive/home
- 这个可以推桌面+麦克风,并且摄像头把人头放在界面下面
四、FFmpeg常用基本命令
1.分离视频音频流
ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流
ffmpeg -i input_file -acodec copy -vn output_file_audio //分离音频流
2.视频解复用
ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264ffmpeg –i test.avi –vcodec copy –an –f m4v test.264
3.视频转码
ffmpeg –i test.mp4 –vcodec h264 –s 352*278 –an –f m4v test.264 //转码为码流原始文件
ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352*278 –an –f m4v test.264 //转码为码流原始文件
ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi //转码为封装文件
- -bf B帧数目控制
- -g 关键帧间隔控制
- -s 分辨率控制
4.视频封装
ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file
5.视频剪切
ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg //提取图片
ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi //剪切视频
- -r 提取图像的频率
- -ss 开始时间
- -t 持续时间
6.视频录制
ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec copy out.avi
7.YUV序列播放
ffplay -f rawvideo -video_size 1920x1080 input.yuv
8.YUV序列转AVI
ffmpeg –s w*h –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi
9.常用参数说明:
主要参数:
i 设定输入流
f 设定输出格式
ss 开始时间
视频参数:
b 设定视频流量,默认为200Kbit/s-r 设定帧速率,默认为25
s 设定画面的宽与高-aspect 设定画面的比例
vn 不处理视频-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器
音频参数:
ar 设定采样率
ac 设定声音的Channel数
acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器an 不处理音频
网友评论