Browse Source

feat: 265支持检查
1. 优化了对于265的支持检查, 不支持时不使用webrtc
2. 优化通道数量的标题

kindring 1 week ago
parent
commit
d67973361e

+ 2 - 2
web_src/src/assets/i18/lang/en-us.js

@@ -154,8 +154,8 @@ export default {
         rePush: "Re-push Stream",
         asyncSuccess: "async success",
         getPushListFail: "Failed to get push list",
-        channelList: "Channel List",
-        channelCount: "Channel Count",
+        channelList: "List",
+        channelCount: "Count",
         channel: "Channel",
         channelId: "Channel ID",
         channelName: "Channel Name",

+ 9 - 8
web_src/src/components/GBRecordDetail.vue

@@ -148,8 +148,17 @@ import h265WebJessibuca from "@components/common/h265webJessibuca.vue";
 import H265WebJs from "@components/common/h265webJs.vue";
 import {webrtcEvent} from "@/map/eventMap";
 import {strFill} from "@/until/str";
+import {checkWebrtcHevcSupport} from "../until/browser";
 
 const playList = [
+  {
+    key: "webrtc",
+    text: "webrtc 播放器",
+    description: "延迟较低的播放器,需要浏览器支持",
+    support: checkWebrtcHevcSupport()? ['h264', 'h265'] : ['h264'],
+    audioSupport: ['opus', 'pcma', 'pcmu'],
+    disable: false
+  },
   {
     key: "jessibuca",
     text: "265 jessibuca播放器",
@@ -158,14 +167,6 @@ const playList = [
     audioSupport: ['aac'],
     disable: false
   },
-  {
-    key: "webrtc",
-    text: "webrtc 播放器",
-    description: "延迟较低的播放器,需要浏览器支持",
-    support: ['h264'],
-    audioSupport: ['opus', 'pcma', 'pcmu'],
-    disable: false
-  },
 ];
 const playerProtocol = {
   webrtc: ["rtc", "rtcs"],

+ 2 - 1
web_src/src/components/com/livePlayBox.vue

@@ -11,13 +11,14 @@ import copy from "@/until/copy";
 import {webrtcEvent} from "@/map/eventMap";
 import {computeMediaStyle} from "@/until/dom";
 import * as domTool from "@/until/dom";
+import {checkWebrtcHevcSupport} from "../../until/browser";
 
 const playList = [
   {
     key: "webrtc",
     text: "webrtc 播放器",
     description: "延迟较低的播放器,需要浏览器支持",
-    support: ['h264', 'h265'],
+    support: checkWebrtcHevcSupport()? ['h264', 'h265'] : ['h264'],
     disable: false
   },
   {

+ 77 - 0
web_src/src/until/browser.js

@@ -0,0 +1,77 @@
+export function checkWebrtcHevcSupport() {
+    let h265Supported = false;
+    try {
+        const codecs = RTCRtpSender.getCapabilities('video').codecs;
+        let codecsFound = new Set();
+        
+
+        codecs.forEach(codec => {
+            if (!['video/red', 'video/ulpfec', 'video/rtx'].includes(codec.mimeType)) {
+                codecsFound.add(codec.mimeType.replace('video/', '').toUpperCase());
+                if (codec.mimeType.toLowerCase().includes('h265')) {
+                    h265Supported = true;
+                }
+            }
+        });
+
+        // Check Chrome version
+        let chromeVersion = null;
+        let isChrome = false;
+        const userAgent = navigator.userAgent;
+        
+        if (userAgent.includes('Chrome/') && !userAgent.includes('Edg/')) {
+            isChrome = true;
+            const match = userAgent.match(/Chrome\/(\d+)/);
+            if (match) {
+                chromeVersion = parseInt(match[1]);
+            }
+        }
+        return h265Supported;
+
+
+    } catch (error) {
+        console.error(error);
+        return h265Supported;
+    }
+}
+
+
+function BorwserIsEdge(userAgent = window.navigator.userAgent)
+{
+    return /Edge/.test(userAgent) || /Edg/.test(userAgent);
+}
+
+function BrowserIsChrome(userAgent = window.navigator.userAgent)
+{
+    return /chrome/i.test(userAgent) && !BorwserIsEdge(userAgent);
+}
+
+function BrowserIsSafari(userAgent = window.navigator.userAgent)
+{
+    return /safari/i.test(userAgent) && !BorwserIsEdge(userAgent); 
+}
+
+function BrowserIsFirefox(userAgent = window.navigator.userAgent)
+{
+    return /firefox/i.test(userAgent) ; 
+}
+
+function BrowserIsOpera(userAgent = window.navigator.userAgent)
+{
+    return /opr\//i.test(userAgent); 
+}
+
+function BorwserIsMobile(userAgent = window.navigator.userAgent)
+{
+    return /mobile/i.test(userAgent); 
+}
+
+function BrowserIsIeWin7(userAgent = window.navigator.userAgent)
+{
+    return /Windows NT 6.1/i.test(userAgent) && /rv:11/i.test(userAgent); 
+}
+
+function BrowserIsOldSafari(userAgent = window.navigator.userAgent)
+{
+    return BrowserIsSafari(userAgent) && (/Version\/8/i.test(userAgent) || /Version\/9/i.test(userAgent)); 
+}