学习链接
MisterZhang/EasyMedia - gitee地址
EasyMedia转码rtsp视频流flv格式,hls格式,H5页面播放flv流视频
文章目录
- 学习链接
- 介绍
- 步骤
- easydarwin启动rtsp服务,ffmpeg推送摄像头(模拟rtsp视频流)
- nginx添加rtmp支持模块,obs推送本地桌面(模拟rtmp视频流)
- 启动EasyMedia
- 添加流
- 效果
- 演示FLV
- EasyMedia文档
- 如何运行
- flv播放
- hls播放
- 参数使用
- 页面功能
- restful api
- 云台功能
介绍
Springboot、netty实现的http-flv、websocket-flv直播点播,支持rtsp、h264、h265、rtmp等多种源,h5纯js播放(不依赖flash),不需要nginx等第三方拉流服务,低延迟(支持识别h264、aac编码自动转封装)
步骤
首先,浏览器无法直接播放rtsp或rtmp格式的视频流,就比如之前 nginx搭建直播推流服务中,我们通过obs把流推送到nginx的rtmp服务,此时可以通过vlc直接通过rtmp的url链接直接播放rtmp视频流,但是浏览器不能直接使用这个rtmp的url链接,因此就通过nginx的rtmp模块插件配置到http服务开启flv_live,这样浏览器就访问这个http服务来播放视频了。
因此,要在浏览器播放rtmp和rtsp视频流,需要对这些视频流做转换。java提供了javacv库可以做到这个,easyMedia使用了这个实现流媒体播放。
easydarwin启动rtsp服务,ffmpeg推送摄像头(模拟rtsp视频流)
启动easydarwin,可以参考:EasyDarwin搭建直播推流服务,注意到rtsp服务端口是10054
把摄像头捕捉的视频推过去
ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:10054/test
此时可以通过vlc打开此流查看是否能够正常查看到视频 rtsp://127.0.0.1:10054/test
nginx添加rtmp支持模块,obs推送本地桌面(模拟rtmp视频流)
nginx添加rtmp支持模块参考:nginx搭建直播推流服务
obs设置推送目的地,在来源添加显示器采集
同样通过vlc查看是否推送成功,rtmp://192.168.134.3:8002/flv/test
启动EasyMedia
拉下easymedia的代码,本地启动
...
---------------------------------------------------------
EasyMedia is running! Access address:
media port at : 8866
http port at : 8888
web Local: http://localhost:8888
web External: http://192.168.134.5:8888
httpflv: http://192.168.134.5:8866/live?url={您的源地址}
wsflv: ws://192.168.134.5:8866/live?url={您的源地址}
hls(m3u8): http://192.168.134.5:8888/hls?url={您的源地址}
h2-database: http://192.168.134.5:8888/h2-console
---------------------------------------------------------
添加流
效果
演示FLV
点击四分屏,选择1个屏,然后选择流,点击播放。
ws://localhost:8866/live?url=rtsp://127.0.0.1:10054/test
ws://localhost:8866/live?url=rtmp://192.168.134.3:8002/flv/test
EasyMedia文档
如何运行
java -jar EasyMedia-0.0.1-SNAPSHOT.jar
还可以这样改端口
java -jar -Dserver.port=页面端口 -Dmediaserver.port=媒体端口 EasyMedia-0.0.1-SNAPSHOT.jar
flv播放
#播放url规则,easymedia启动后,直接将此链接用flv播放器就能放
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
hls播放
#用hls播放器播放,必须要通过页面或者api开启切片后才能放,这功能是最近新增内容,后期会做优化
#注意此处是http端口8888,后期将统一使用媒体端口
http://localhost:8888/hls?url={您的源地址}
参数使用
#参数
autoClose=false(无人观看一分钟后自动关闭推流,默认true开启自动关闭,false不关闭)
ffmpeg=true (true为强制使用ffmpeg,否则默认使用javacv)
#永久播放
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
#ffmpeg方式推流(遇到不支持的流可以使用此参数,强制使用ffmpeg)
http://localhost:8866/live?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102&&&ffmpeg=true
ws://localhost:8866/live?url=rtsp://admin:VZCDOY@192.168.2.84:554/Streaming/Channels/102&&&ffmpeg=true
#可以多个参数一起,只需参数前面增加&&&
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
页面功能
访问 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
云台功能
目前支持海康相机,大华待更新
http://localhost:8888/hk/ctrl?ip=192.168.2.120&op=left&username=admin&password=VZCDOY
ip 相机ip
op 操作,up、down、left、right、left_up、left_down、right_up、right_down、big、small
username 相机用户名
password 相机密码
port 控制端口(可不传)