EasyMedia v1.0.0 发布,一款简单的流媒体服务
EasyMedia v1.0.0 已经发布。
介绍
Springboot、netty实现的http-flv、websocket-flv流媒体服务(可用于直播点播),支持rtsp、h264、h265等、rtmp等多种源,h5纯js播放(不依赖flash),不需要依赖nginx等第三方,延迟大部分在1-5秒内(已经支持转复用,h264的流自动转封装,超低延迟。PS:当然还有种更低延迟的不用flv方案没时间写了,但是主要是flv比较大众,这个一般也够用了)。
PS:项目里已经集成最新版编译好的前端,由于前端只是个demo,这里是没有hls功能的版本,hls前端播放比较简单,我就懒得上传了
功能汇总 (文档水平有限,使用前尽量先看完readme)
- 支持播放 rtsp、rtmp、http、文件等流……
- pc端桌面投影
- 支持永久播放、按需播放(无人观看自动断开)
- 自动判断流格式h264、h265,自动转封装
- 支持http、ws协议的flv
- 支持hls内存切片(不占用本地磁盘,只占用网络资源)
- 重连功能
- 支持javacv、ffmpeg方式切换
软件架构
- netty负责播放地址解析及视频传输,通过javacv推拉流存到内存里,直接通过输出到前端播放
- 后端:springboot、netty,集成websocket
- 前端:vue、html5(简单的管理页面)
- 播放器:西瓜播放器 http://h5player.bytedance.com/ (字节跳动家的,不介绍了,抖音视频、西瓜视频都杠杠的,当然只要支持flv的播放器都可以)
- 媒体框架:javacv、ffmpeg
使用教程
流媒体服务会绑定两个端口,分别为 8866(媒体端口)、8888(web端口,后续会做简单的管理页面) 您只需要将 {您的源地址} 替换成您的,然后放播放器里就能看了
- 播放地址(播放器里直接用这个地址播放)
http://localhost:8866/live?url={您的源地址}
ws://localhost:8866/live?url={您的源地址}
例如rtsp:
http://localhost:8866/live?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102
ws://localhost:8866/live?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102
文件(支持格式参照ffmpeg支持的格式):
http://localhost:8866/live?url=d:/flv/testVideo.mp4
ws://localhost:8866/live?url=d:/flv/testVideo.mp4
电脑桌面投影(url改成desktop即可):
http://localhost:8866/live?url=desktop
ws://localhost:8866/live?url=desktop
- 推拉流(有两种方式)
- 按需播放(默认)直接使用上面播放地址就可以播放,每次第一个用户打开会创建推流,没人看时十几秒后会自动断开流。
- 永久播放,通过restfu api或者页面先新增流,再开启推流,在服务同级目录会生成一个camera.json,重启服务发现camera.json也会自动推流,用json文件是方便手动维护源地址,之后通过播放地址可以在浏览器直接秒开。
- hls播放, http://localhost:8888/hls?url={您的源地址}
永久播放还有一种捷径,就是在播放地址后面加上autoClose=false参数,也会加入到json中。 例如: http://localhost:8866/live?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102&&&autoClose=false ws://localhost:8866/live?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102&&&autoClose=false ### hls播放例子:(注意:hls为http端口8888,并且不支持url后面参数,开启切片后可以播放) http://localhost:8888/hls?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102
- url参数说明
参数加在播放地址url最后面,使用 [&&&] 符号 例如: http://localhost:8866/live?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102&&&autoClose=false&&&ffmpeg=true ws://localhost:8866/live?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102&&&autoClose=false&&&ffmpeg=true ### autoClose=false 设置为永久播放 ffmpeg=true 使用ffmpeg方式,提高兼容稳定性(不支持的流可以试试这个参数) //hls=true(目前还不支持此参数,只能api或者网页端控制开启)
- 页面功能
可以访问 http://localhost:8888 具体功能参照截图
- restful api
新增流 http://localhost:8888/add?url={您的源地址}&remark={备注}
停止并删除 http://localhost:8888/del?url={您的源地址}
停止flv推流 http://localhost:8888/stop?url={您的源地址}
开启flv推流 http://localhost:8888/start?url={您的源地址}
开启hls切片 http://localhost:8888/startHls?url={您的源地址}
停止hls切片 http://localhost:8888/stopHls?url={您的源地址}
查看保存的流 http://localhost:8888/list
- 成品运行方式(由于是跨平台的,未做ffmpeg精简,所以包会比较大)
java -jar EasyMedia-0.0.1-SNAPSHOT.jar 还可以这样改端口 java -jar -Dserver.port=页面端口 -Dmediaserver.port=媒体端口 EasyMedia-0.0.1-SNAPSHOT.jar
疑问解答
- 在vlc、ffplay等播放器测试存在延迟较高是正常的,是因为他们默认的嗅探关键帧的时间比较长,测延迟建议还是用flv.js播放器测试。
- 是否需要ffmpeg推流,不需要,就是为了简化使用,只需运行一个服务即可。
- 很多人想用文件点播,可以参考截图。
截图



源码教程
- 环境:java8+
- 标准的maven项目,sts、eclipse或者idea导入,直接运行main方法
