一、项目介绍
1.项目背景
MediaServer流媒体服务器,是为满足JT/T 1078道路运输车辆卫星定位系统视频通信协议开发的流媒体服务器,用于接入终端的实时音视频流,并转换为可在Web页面或播放器播放的流媒体数据,供客户端调用及音视频播放。
该项目终端接入部分采用高性能、基于Libuv框架实现,H264及音视频裸流到FLV,RTSP,RTMP的转换
2.项目当前进展
当前的流媒体服务器,支持满足1078协议的终端音视频接入,GB28181流接入。其中,视频流支持H264格式,音频流支持G711A,ADPCMA,AAC等格式的接入。
服务器并发能力,在CPU 2.0GHz 4核,内存8G情况下,可以同时接入200个以上的音视频流。
3.当前支持的音视频格式及码流
H264:服务端不限制分辨率、帧率
G711A:采样率8000,采样位数8,声道数1
ADPCMA: 采样率8000,采样位数16,声道数1
二、开发说明
1.搭建环境
windows环境:采用VSCode程序编辑器或其他C/C++的程序编辑环境
linux环境:Ubuntu16_04 64位操作系统
gcc/g++ 5.4.0及以上版本
2.编译:
步骤一:将源码及include和lib文件,拷贝到Ubuntu环境下
步骤二:进入MediaServer目录,并执行make命令进行编译,生成mediaserver可执行文件
说明:如果在编译过程中提示缺少动态库如libuv.so,可执行如下动态库加载脚本:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../lib
上面脚本的功能是将源码目录上一层目录的lib库添加到动态库路径中
3.项目目录说明
三、部署说明
1.检查安装环境
(1)软件环境
操作系统:Ubuntu 16.04.1 LTS
gcc/g++工具:g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0
(2)硬件环境
建议:CPU 2.0GHz, 4核及以上
内存:4G及以上
硬盘:500G及以上
网络:100M带宽或以上
2.安装MediaServer流媒体服务器(默认root用户安装)
(1)将MediaServer_***.tar.gz软件包放置到root目录下,并进行解压
tar -zxvf MediaServer_***.tar.gz
(2)进入到MediaServer目录,并验证mediaserver的动态库是否完整
cd MediaServer
ldd mediaserver
执行该命令后,将列出mediaserver依赖的动态库,如出现 not found,说明配置库不完整,可将上级目录下的lib目录内文件拷贝/usr/local/lib目录下,或者将上级目录下的lib库目录添加到系统的动态库加载路径,执行如下脚本:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../lib
上面脚本的功能是将源码目录上一层目录的lib库添加到动态库路径中
注意: 以上语句仅对当前shell生效,如需每次重启或登录shell后生效,请自行百度如何添加脚本语句到对应的启动执行文件中
3.配置文件及相关说明
注意:(此处只讲必要的配置,其他配置项以默认为准)
; auto-generated by mINI class {
[api]
apiDebug=1
secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
[ffmpeg]
bin=
cmd=%s -re -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264 -f flv %s
log=./ffmpeg/ffmpeg.log
[general]
addMuteAudio=1
enableVhost=0
flowThreshold=1024
maxStreamWaitMS=15000
publishToHls=1
publishToMP4=1
publishToRtxp=1
resetWhenRePlay=1
streamNoneReaderDelayMS=20000
ultraLowDelay=1
[hls]
fileBufSize=65536
filePath=./www
segDur=2
segNum=3
segRetain=5
[http]
charSet=utf-8
keepAliveSecond=15
maxReqSize=4096
notFound=<html><head><title>404 Not Found</title></head><body bgcolor="white"><center><h1>您访问的资源不存在!</h1></center><hr><center>MediaServer</center></body></html>
port=8080
rootPath=./www
sendBufSize=65536
sslport=8443
[multicast]
addrMax=239.255.255.255
addrMin=239.0.0.0
udpTTL=64
[record]
appName=record
fastStart=0
fileBufSize=65536
filePath=./www
fileRepeat=0
fileSecond=3600
sampleMS=500
[rtmp]
handshakeSecond=15
keepAliveSecond=15
modifyStamp=0
port=1935
[rtp]
audioMtuSize=600
clearCount=10
cycleMS=46800000
maxRtpCount=50
videoMtuSize=1400
[rtp_proxy]
checkSource=1
dumpDir=
rtp_type=MP2P
timeoutSec=15
[rtsp]
authBasic=0
directProxy=1
handshakeSecond=15
keepAliveSecond=15
port=554
[shell]
maxReqSize=1024
[terminal]
port=6100
[register]
code=UMRLEORM
; }
[api]
secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc //此处的secret为http访问接口时需要的密钥
[http]
port=80 //flv地址及http接口访问端口,如修改为其他端口,请修正客户端访问时的http端口
[terminal]
port=6100 //设备推流端口
四、运行实例