ToB企服应用市场:ToB评测及商务社交产业平台

标题: Web 播放 RTSP(Webrtc方案) [打印本页]

作者: 千千梦丶琪    时间: 2024-8-5 16:03
标题: Web 播放 RTSP(Webrtc方案)
Web 播放 RTSP(Webrtc方案)

需求背景

项目需要在 web 上播放海康摄像头,这个在各种智慧类应用上应该是常见需求,在前几年的时候也有这个需求,当时候通过旧版本谷歌浏览器可以直接播放 rtmp 解决了题目;现在谷歌浏览器已经不再支持,项目上又有这个需求,筹划好好处置惩罚下。大概需求内容项目有多个车,每个车有多个摄像头,web对这些摄像头进行管理呈现。
Web 播放视频流方案

web 播放视频流有多种方案有 HLS、flv、webrtc 等等,我们这里选用 webrtc 方案,webrtc 播放视频是网页原生支持的音视频通信技术,对比其他其他方案有低时延等长处
Webrtc 实践

  1. export function WebRtcPlayer(props: { suuid: string, url: string }) {
  2.     let ref = useRef<HTMLVideoElement>();
  3.     useEffect(() => {
  4.         let { suuid, url } = props;
  5.         let stream = new MediaStream();
  6.         const pc = new RTCPeerConnection();
  7.         pc.onnegotiationneeded = async () => {
  8.             let offer = await pc.createOffer();
  9.             await pc.setLocalDescription(offer);
  10.             let formData = new FormData();
  11.             formData.append('suuid', suuid);
  12.             formData.append('data', btoa(pc.localDescription.sdp));
  13.             fetch(`${APP_CONFIG.rtc}/stream/receiver/` + suuid, {
  14.                 method: "POST",
  15.                 body: formData
  16.             }).then(resp => {
  17.                 return resp.text()
  18.             }).then(data => {
  19.                 try {
  20.                     pc.setRemoteDescription(new RTCSessionDescription({
  21.                         type: 'answer',
  22.                         sdp: atob(data)
  23.                     }))
  24.                 } catch (e) {
  25.                     console.warn(e);
  26.                 }
  27.             })
  28.         };
  29.         pc.ontrack = function (event) {
  30.             stream.addTrack(event.track);
  31.             ref.current.srcObject = stream;
  32.             log(event.streams.length + ' track is delivered')
  33.         }
  34.         pc.oniceconnectionstatechange = e => log(pc.iceConnectionState)
  35.         let log = msg => {
  36.             // document.getElementById('div').innerHTML += msg + '<br>'
  37.         }
  38.         //新增加的http接口
  39.         let formData = new FormData();
  40.         formData.append('suuid', suuid);
  41.         formData.append('url', url);
  42.         fetch(`${APP_CONFIG.rtc}/codec`, {
  43.             method: "POST",
  44.             body: formData
  45.         })
  46.             .then(resp => resp.json())
  47.             .then(data => {
  48.                 (data as any[]).forEach(el => {
  49.                     pc.addTransceiver(el.Type, {
  50.                         'direction': 'sendrecv'
  51.                     })
  52.                 })
  53.                 pc.setRemoteDescription(new RTCSessionDescription({
  54.                     type: 'answer',
  55.                     sdp: atob(data)
  56.                 }))
  57.             }).catch(e => {
  58.                 console.warn(e);
  59.             })
  60.         //demo中使用的接口
  61.         // fetch("http://127.0.0.1:8083/stream/codec/" + suuid)
  62.         //     .then(resp => resp.json())
  63.         //     .then(data => {
  64.         //         (data as any[]).forEach(el => {
  65.         //             pc.addTransceiver(el.Type, {
  66.         //                 'direction': 'sendrecv'
  67.         //             })
  68.         //         })
  69.         //         pc.setRemoteDescription(new RTCSessionDescription({
  70.         //             type: 'answer',
  71.         //             sdp: atob(data)
  72.         //         }))
  73.         //     }).catch(e => {
  74.         //         console.warn(e);
  75.         //     })
  76.     }, [])
  77.     return <video ref={ref} style={{ width: "600px" }} autoPlay muted controls />
  78. }
复制代码
其中 fetch(${APP_CONFIG.rtc}/stream/receiver/ + suuid 和 fetch(http://127.0.0.1:8083/stream/codec/ + suuid) 是项目 demo 中利用到的接口,项目跑起,可以在项目里看到摄像头,开端完成。
完成修改后运行项目播放 ok,断网播放 ok,本地服务器 docker 摆设再次测试发现没法播放,毗连断了 WritePacket WebRTC Client Offline,


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4