webRTC
运行srs,http-flv拉流,并进行webRTC的流输出。
开发机运行srs,本地推rtmp到开发机,同时本地通过webRTC拉流,可以实现。但是webRTC不支持组播,此方案不可行。
WebRTC目前不能对组播提供支持
RTSP
服务端支持RTSP推流有解决方案,客户端是web浏览器
- 不支持UDP,进而不支持基于UDP的RTP和RTSP
- 不支持插件,插件能接收RTSP流但是主流浏览器已逐渐不再支持插件
- FLASH已不再支持,因此不能采用RTSP转RTMP方案
候选方案如下
- H5Stream(收费) https://www.cnblogs.com/Vince-blogs/p/8608076.html
- html5_rtsp_player + streamedian(收费) https://github.com/Streamedian/html5_rtsp_player
- jsmpeg https://github.com/phoboslab/jsmpeg
- WebAssembly+ffmpeg demo:https://github.com/ringcrl/FFmpeg
EasyDarwin https://github.com/EasyDarwin/EasyDarwin is awesome!
RTSP单播验证
RTSP单播推EasyDarwin,本机ffmpeg配合浏览器拉流
实验目的:
- 验证RTSP推流可实现
- 验证RTSP拉流可实现
- 验证浏览器的RTSP拉流可实现
实验过程:
本地ffmpeg推流到服务端EasyDarwin
ffmpeg -f avfoundation -framerate 30 -video_size 1280x720 -i “0” -rtsp_transport udp -vcodec h264 -f rtsp “rtsp://10.227.22.22/allhands/stream_yuyao”
本地运行打开webSocket模块 websocket-relay.js
node websocket-relay.js supersecret 8081 8082
本地运行ffmpeg转码,将rtsp转为websocket
ffmpeg -i “rtsp://10.227.22.22/allhands/stream_yuyao” -q 0 -f mpegts -codec:v mpeg1video http://127.0.0.1:8081/supersecret
本地打开view-stream.html页面(可以用任意http-server),观察输出
实验结论:
- RTSP单播推流可行
- 浏览器配合ffmpeg拉RTSP可行
当前风险点
- 浏览器不支持UDP拉流,据大佬将即使用webassembly预编译FFMPEG也不行
- 浏览器不支持IGMP协议
- CPU占用、延迟、并发、画面可靠性还未知