Springboot、netty实现的http-flv、websocket-flv流媒体服务(可用于直播点播),支持rtsp、h264、h265等、rtmp等多种源,h5纯js播放(不依赖flash),不需要依赖nginx等第三方,低延迟(支持识别h264、aac编码自动转封装)。
距离上次更新已经时隔半年多了,由于业余时间还有其他事要做,此1.x版本到此不再维护了,但是依旧抽空在写2.0版本,重新封装了一下,封装成player这种形式(类似一些播放器api)、对线程、稳定性还有hls做了优化,后续尽快会发布2.0版本。
有些人的编码不是h264 aac,强烈建议把视频流换成这个,因为可以转封装,延迟低(1s内)、cpu占用低(几乎不怎么占用) 如果是其他编码比如h265 pcm会进行转码,有些流不是标准rtsp视频协议或者的数据不完整,转码的时候会出现异常,转码会消耗cpu、并且延迟在5s内(最新版的特性延迟更低,本人亲测h265的相机即便转码延迟也就2s)
有时候因为网络异常断开,这种情况怎么处理,由于重连是客户端做的事情,所以可以参考 https://blog.csdn.net/Janix520/article/details/119567408
链接: https://pan.baidu.com/s/1pkuaDsosHsuGKR4qZK-3jA 提取码: t32b 复制这段内容后打开百度网盘手机App,操作更方便哦 --来自百度网盘超级会员v5的分享
//自行打包
mvn clean package -Dmaven.test.skip=true
前端源码也可以从群中获取 QQ交流群 873959305
FROM centos:7.9.2009
# java
ARG JAVA_VERSIOIN=1.8.0
SHELL ["/bin/bash", "-c"]
ENV BASH_ENV ~/.bashrc
ENV JAVA_HOME /usr/local/jdk-${JAVA_VERSIOIN}
ENV PATH ${JAVA_HOME}/bin:$PATH
RUN \
# Install JDK
if [ "$JAVA_VERSIOIN" == "1.8.0" ]; \
then \
yum -y remove java-1.8.0-openjdk \
&& curl -fSL https://files-cdn.liferay.com/mirrors/download.oracle.com/otn-pub/java/jdk/8u121-b13/jdk-8u121-linux-x64.tar.gz -o openjdk.tar.gz \
&& mkdir -pv /usr/local/jdk-1.8.0 && tar -zxvf openjdk.tar.gz -C /usr/local/jdk-1.8.0 --strip-components 1 \
&& rm -f openjdk.tar.gz \
&& echo "export JAVA_HOME=/usr/local/jdk-${JAVA_VERSIOIN}" >> ~/.bashrc \
&& echo "export PATH=\"/usr/local/jdk-${JAVA_VERSIOIN}/bin:$PATH\"" >> ~/.bashrc \
&& echo "export JAVA_HOME PATH " >> ~/.bashrc \
&& cat ~/.bashrc \
&& source ~/.bashrc ; \
fi \
# Test install
&& ls -l /usr/local/ \
&& javac -version
ARG MAVEN_VERSION=3.5.3
ENV M2_HOME /opt/apache-maven-$MAVEN_VERSION
ENV JAVA_HOME /usr/local/jdk-${JAVA_VERSIOIN}
ENV maven.home $M2_HOME
ENV M2 $M2_HOME/bin
ENV PATH $M2:$PATH:JAVA_HOME/bin
RUN curl -f -L https://archive.apache.org/dist/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz | tar -C /opt -xzv \
&& rm -f gradle.zip \
&& echo "export M2_HOME=/opt/apache-maven-${MAVEN_VERSION}" >> ~/.bashrc \
&& echo "export MAVEN_HOME=${M2_HOME}" >> ~/.bashrc \
&& echo "export M2=${M2_HOME}/bin" >> ~/.bashrc \
&& echo "export PATH=\"$M2:$PATH:JAVA_HOME/bin\"" >> ~/.bashrc \
&& echo "export M2_HOME MAVEN_HOME M2 PATH " >> ~/.bashrc \
&& cat ~/.bashrc \
&& source ~/.bashrc \
&& ls -l /opt \
&& mvn -v \
CMD ["mvn","-version"]
流媒体服务会绑定两个端口,分别为 8866(媒体端口)、8888(web端口,后续会做简单的管理页面) 您只需要将 {您的源地址} 替换成您的,然后放播放器里就能看了
播放地址(播放器里直接用这个地址播放)
http://localhost:8866/live?url={您的源地址}
ws://localhost:8866/live?url={您的源地址}
请直接阅读wiki或者doc中文档!!!
有人问这个能否商用,能,本软件采用MIT宽松协议,但是注意软件里面应用了一些其他库javacv、ffmpeg等均是GPL协议,需要遵循此协议,只要不修改javacv、ffmpeg等具有GPL协议的源码,其他都能任意改,也可任意商用,如果改了GPL源码,那么你代码也将受到GPL协议约束。
现在flash已经被抛弃,h5播放的时代,网上实现大多不是特别完整的(比如拿到一个rtsp或者rtmp,也不知道怎么在h5页面直接播放),当然现在直播点播有很多方式,可以通过nginx带flv模块的当rtmp服务、还有srs等流媒体服务,而这里我们通过javacv来处理,事实上javacv性能足够,底层ffmpeg也是通过c实现,使用java调用c跟使用c++去调用c差不了多少毫秒延迟。java流媒体资料比较少,但从应用层来说,java有着庞大的生态优势,配合netty写出的流媒体性能可想而知,而此源码目前也比较简单,可读性比较强,有能力者完全能自主改成java分布式流媒体。随着人工智能图像识别的发展,从流媒体获取图像数据是必要条件,有bug希望你们也能及时提出。
最后感谢eguid的javacv文档,https://eguid.blog.csdn.net/