因为文章比较长,先上效果图打点鸡血
因为只有俩手机,没法拍照,手机录制、手机播放的就不贴图了,可以直接demo中修改自己服务器的ip地址即可
本文尽量只讲实现步骤,不讲原理,想看原理的移步以下两个博客
原理:http://www.jianshu.com/p/53059be61546
推流原理:http://www.jianshu.com/p/db7b2551538b
一、Homebrew安装
Homebrew是Mac OSX上的软件包管理工具,可以方便的管理mac上的软件安装、卸载。
1.首先使用man brew 命令在终端查看是否安装了该工具,如果安装了则会打印出如下一些信息,否则需要安装homebrew管理工具
man brew
2.安装homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
看到有"installation successful!"的提示,则表示安装成功了。
二、利用home brew安装nginx服务器
1.下载nginx
brew tap homebrew/nginx
2.安装nginx 和rtmp模块
brew install nginx-full --with-rtmp-module
3.安装结束后查看一下是否安装成功使用"nginx"命令开启nginx服务器
nginx
如果出现bind fail,8080端口被占用的情况,则查看是哪个进程端口占用了并关掉对应pid的进程
sudo lsof -n -P| grep :8080
//直接copy吧,空格和|不能少
假如对应pid是1945
kill 1945
如果杀不死可以强制杀 sudo kill 1945 或者去进程管理器里强制杀死
杀死后别忘记重新开启nginx
然后在浏览器输入http://localhost:8080
(localhost是本机地址,8080是nginx默认监听端口)查看是否能出现如下图所示
如果需要卸载nginx,执行以下命令
brew uninstall nginx-full
三、配置rtmp参数
1.查看nginx配置文件安装在哪
brew info nginx-full
然后command+f搜索"The default port has been set in",后面的就是配置文件路径了
2.然后command+shift+g 粘贴刚查询到的conf路径
3.打开如下配置文件(xcode即可)
在文本的最后面配置如下参数,然后保存
rtmp {
server {
listen 1990;
application liveApp {
live on;
record off;
}
}
}
4.重新加载nginx的配置文件,使其生效
nginx -s reload
四、安装ffmepg进行推流
1.安装ffmpeg后我们可以使用mac的摄像头、mic和桌面录屏进行数据推送
brew install ffmpeg
2、安装成功后进行ffmepg推流
ffmpeg -re -i (视频全路径) -vcodec copy -f flv (rtmp路径
比如我桌面有一个Worth.mp4,之前conf配置的路径是“rtmp://localhost:1990/liveApp/room”,那么我们如下进行推流
ffmpeg -re -i /Users/myMac/Desktop/Worth.mp4 -vcodec copy -f flv rtmp://localhost:1990/liveApp/room
-re: 一定要加,代表按照帧率发送,否则ffmpeg会一股脑地按最高的效率发送数据
-i : 输入文件
-vcodec copy: 强制使用codec编解码方式,要加,否则ffmpeg会重新编码输入的H.264裸流
-f 强制转换为什么格式,后接格式
五、使用VLC播放rtmp推流
-
下载VLC安装👇这儿
2.安装结束后打开vlc然后“command+n"快捷打开,在网络选项下输入conf中配置的地址"rtmp://localhost:1990/liveApp/room"
如果此时还在桌面视频的流推还在进行,那么此时双击右图中的地址活着播放按钮则会进行播放
六、利用mac摄像头、mic、屏幕录制进行推流测试
1.先看一下ffmpeg都支持哪些设备
ffmpeg -f avfoundation -list_devices true -i ""
2.抓取桌面和摄像头进行推流(自己把回车符去下)
ffmpeg -f avfoundation -framerate 30 -i "0:0" -f avfoundation -framerate 30 -video_size 640x480 -i "0" -c:v libx264 -preset slow -filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1990/liveApp/room
-f avfoundation 转换为avfoundation
-framerate 30 : 设置帧率 30
-i "1:0" : 设置输出,视频:Capture screen 音频:Built-in Microphone,前面的“1”表示视频(0摄像头,1:桌面截屏,出现画中画可以把1改成0),后面的"0"表示音频输入麦克风
-f avfoundation -framerate 30 -video_size 640x480 : 设置帧率和视频尺寸
-c:v libx264 设置视频编码,H.264编码 优点是同等清晰度,视频文件更小 缺点就是转换慢
-c:v flv 标准FLV编码 这个好处是速度快 清晰度高的话 视频文件会比较大
-preset slow 使用慢速模式 延迟长 清晰度高
ffmpeg的转码延时测试与设置优化 http://blog.chinaunix.net/uid-26000296-id-5747671.html
-filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10':给视频打水印
-acodec libmp3lame 強制指定音频处理模式
-ac 1 声道选择
-ar 44100 音频赫兹
如此,你的
七、手机端拉流测试
手机端我是通过ljkplayer进行拉流播放的,几行代码的事,就不讲了,直接上demo,刚下载下来是没有集成ijkframework的,因为太大,github传不上去,所以上传到云端了( https://pan.baidu.com/s/1mhD9aqs ),从云端下载拖到framework文件夹即可。
记得改里面的流地址(你的服务器的ip地址+路径),如果你都是按上面的配置文件配置的话,直接替换你的ip地址就行(mac命令行ifconfig 或者网络偏好设置查看ip地址),
拉流客户端demo
八、手机端推流测试
推流还是比较复杂的,因为涉及到视频、音频采集、裁剪、编码、推流等一系列操作,这个之前参考 下他的这篇文章,因为他的文章中只讲了视频的推流、关于服务器的搭建和拉流的内容没有涉及,所以放到本章是为了让大家对服务器、拉流客户端和推流客户端有一个闭环的实现,实现手机端录制、推送到服务器、手机端播放的功能,至于具体原理想了解的可以查看他们的博客
需要检测手机端数据是否发送到服务器的话可以进行端口监听
sudo tcpdump -i en0 'port 1990'
有问题的地方希望大家提出来,大家一起交流进步,不怎么会写博客,望小火车们多多谅解