流媒体服务器搭建
环境:树莓派做流媒体服务器,摄像头是RTSP协议的,ffmpeg做推流工具
nginx-rtmp-module
官方github地址:https://github.com/arut/nginx-rtmp-module
可以直接下载zip包,下载地址:https://codeload.github.com/arut/nginx-rtmp-module/zip/master
安装nginx
官方网站: http://nginx.org/en/download.html
下载地址http://nginx.org/download/nginx-1.12.2.tar.gz ;
将nginx-rtmp-module解压,将nginx解压。都在同一个目录下。
为了方面,可以将解压后的文件名改名。分别改名为nginx-rtmp-modul和nginx
cd nginx
./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module --with-http_ssl_module
make && make install
注意:
树莓派安装的是Raspbian系统,需要用root账号进行安装
注意:
树莓派安装的是Raspbian系统,需要用root账号进行安装
./configure --prefix=/你的安装目录 --add-module=/第三方模块目录,目前我安装到了/usr/local/nginx目录
如果编译安装失败,还可能需要安装以下模块
sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev pcre-devel openssl openssl-devel
修改nginx配置文件
vi /usr/local/nginx/conf/nginx.conf
在文件的最后追加如下内容
rtmp {
server {
listen 1935; #监听的端口
chunk_size 4000;
application hls { #rtmp推流请求路径
live on;#开启实时
hls on;#开启hls
hls_path /usr/local/nginx/html/hls;#rtmp推流请求路径,文件存放路径
hls_fragment 5s;#每个TS文件包含5秒的视频内容
}
}
}
注意:
还有就是这个路径,看你自己的实际情况的访问根目录来,我的是/usr/local/nginx/html/这个路径,
注意:
还有就是这个路径,看你自己的实际情况的访问根目录来,我的是/usr/local/nginx/html/这个路径,
然而/usr/local/nginx/html/hls肯定没有这个目录,所以需要建一个放流文件的目录hls,并且需要改权限可读可写的权限
启动nginx
/usr/local/nginx/sbin/nginx
推流设置
由于摄像头是rtsp协议的,需要转换并推送到rtmp的地址
转换并推送的格式如下
ffmpeg -i rtsp://<你的rtsp流的地址> -vcodec copy -acodec copy -f flv rtmp://<你的服务器接收地址这里我们用localhost/live/livestream>
以下是我实际测试的示例
ffmpeg -i rtsp://rtsp://192.168.1.10:554/user=admin_password=tlJwpbo6_channel=1_stream=0.sdp?real_stream -vcodec copy -acodec copy -f flv rtmp://192.168.0.15:1935/hls/demo
注意
摄像头是雄迈的,支持onvif协议的,rtsp的地址,可以通过onvif工具ONVIF Device Test Tool查看获得。
默认的webservice地址是192.168.1.10
拉流
可以通过RTMP或者HTTP进行视频播放。
RTMP拉流
拉流地址:rtmp://192.168.0.15:1935/hls/demo
我使用VLC进行拉流测试的,这个貌似大约应该是可以在PC端的浏览器上播放(没以测试)
HLS拉流
拉流地址:http://192.168.0.15/hls/demo.m3u8
我使用VLC进行拉流测试的,这个貌似大约应该是可以在移动端的浏览器上播放(没以测试)
注意
移动端通过html5的video标签可以查看直播(没有测试)
最后放上测试截图
启动nginx
/usr/local/nginx/sbin/nginx
推流设置
由于摄像头是rtsp协议的,需要转换并推送到rtmp的地址
转换并推送的格式如下
ffmpeg -i rtsp://<你的rtsp流的地址> -vcodec copy -acodec copy -f flv rtmp://<你的服务器接收地址这里我们用localhost/live/livestream>
以下是我实际测试的示例
ffmpeg -i rtsp://rtsp://192.168.1.10:554/user=admin_password=tlJwpbo6_channel=1_stream=0.sdp?real_stream -vcodec copy -acodec copy -f flv rtmp://192.168.0.15:1935/hls/demo
注意
摄像头是雄迈的,支持onvif协议的,rtsp的地址,可以通过onvif工具ONVIF Device Test Tool查看获得。
默认的webservice地址是192.168.1.10
拉流
可以通过RTMP或者HTTP进行视频播放。
RTMP拉流
拉流地址:rtmp://192.168.0.15:1935/hls/demo
我使用VLC进行拉流测试的,这个貌似大约应该是可以在PC端的浏览器上播放(没以测试)
HLS拉流
拉流地址:http://192.168.0.15/hls/demo.m3u8
我使用VLC进行拉流测试的,这个貌似大约应该是可以在移动端的浏览器上播放(没以测试)
注意
移动端通过html5的video标签可以查看直播(没有测试)
video(controls)
source(src="http://localhost:1935/live/livestream/playlist.m3u8")
最后放上测试截图
问题
不知道是我网络不好还是咋回事,ffmpeg拉流并推流的过程中,会有丢包现象,只不过有时候丢的多,有时候丢的少。
后续遇到其他问题,再次补充
不知道是我网络不好还是咋回事,ffmpeg拉流并推流的过程中,会有丢包现象,只不过有时候丢的多,有时候丢的少。
后续遇到其他问题,再次补充