目前,做网络直播的人比较多。各种摄像头接入大多通过GB28181协议。将视频转到公网流媒体服务器,公网流媒体服务器再提供流格式转换,转成RTMP、HTTP-FLV、HLS等可以Web、微信等直接播放的格式。
那么GB28181如何实现无插件Web直播,可以采用以下几种方式:
1. WebRTC
WebRTC是现代浏览器原生支持的实时通信技术,无需插件即可实现视频直播:
-
流程:
- 通过SIP协议接入GB28181设备
- 将PS流转换为WebRTC支持的格式
- 使用WebRTC协议传输到浏览器
-
优点:低延迟(200-800ms),浏览器原生支持
-
缺点:需要处理PS流转换,对服务器性能要求较高
2. HTTP-FLV/WebSocket
-
流程:
- GB28181设备接入媒体服务器
- 服务器将PS流转换为FLV格式
- 通过HTTP-FLV或WebSocket推送到前端
- 前端使用flv.js或类似库播放
-
优点:兼容性好,延迟约1-3秒
-
缺点:相比WebRTC延迟稍高
3. HLS
-
流程:
- 将GB28181流转换为HLS格式
- 通过HTTP服务器分发m3u8和ts文件
- 前端使用hls.js播放
-
优点:兼容性极佳,支持自适应码率
-
缺点:延迟较高(5-20秒)
4. WebAssembly
- 使用WASM解码PS流,直接在浏览器中解码播放
- 优点:可实现低延迟
- 缺点:开发复杂度高,性能消耗大
推荐实现步骤
- 媒体服务器选择:选择支持GB28181的媒体服务器如SRS、ZLMediaKit等
- 协议转换:配置服务器将GB28181的PS流转换为Web友好格式
- 前端播放器:根据选择的协议使用对应播放器(如flv.js、hls.js等)
- 信令处理:实现Web与GB28181设备的信令交互(可通过WebSocket中转)
示例代码片段
// 使用flv.js播放HTTP-FLV流
import flvjs from 'flv.js';
if (flvjs.isSupported()) {
const videoElement = document.getElementById('videoElement');
const flvPlayer = flvjs.createPlayer({
type: 'flv',
url: 'http://your-server/live/stream.flv'
});
flvPlayer.attachMediaElement(videoElement);
flvPlayer.load();
flvPlayer.play();
}
// 使用WebRTC播放
const pc = new RTCPeerConnection();
pc.addTransceiver('video', { direction: 'recvonly' });
pc.ontrack = (event) => {
const video = document.getElementById('videoElement');
video.srcObject = event.streams[0];
};
// 通过信令服务器建立连接...
以上方案均可实现GB28181的无插件Web直播,具体选择应根据延迟要求、兼容性需求和现有基础设施来决定。