Files
go2rtc/www
Sergey Krashevich 31398a7e6b feat(dark-mode): implement dark mode and centralize CSS
Implemented a dark mode feature for the website, including a toggle button in the navigation bar that allows users to switch between light and dark themes. To support this feature, centralized common CSS styles (such as body, table, and button stylings) into main.js to ensure consistent application across all HTML pages. This change improves user experience by providing a visually comfortable alternative for low-light environments and centralizes styling rules for easier maintenance.

- Added dark mode styles for body, table, buttons, and navigation elements in main.js.
- Introduced a toggle mechanism in the navigation bar to switch between light and dark modes.
- Utilized JavaScript to detect system theme preference (`prefers-color-scheme`) and persist user's theme choice using localStorage.
- Removed duplicate and scattered CSS rules from individual HTML files (add.html, index.html, links.html, log.html) and centralized them in main.js to reduce redundancy and facilitate easier updates in the future.

This update enhances accessibility and user preference compliance by allowing users to select their desired theme while simplifying CSS management across the website.
2024-03-22 18:15:52 +03:00
..
2023-10-09 17:12:25 +03:00
2022-09-01 16:11:34 +03:00
2023-07-11 15:03:27 +03:00

Browser support

ECMAScript 2019 (ES10) supported by iOS 12 (iPhone 5S, iPad Air, iPad Mini 2, etc.).

But ECMAScript 2017 (ES8) almost fine (es6 + async) and recommended for React+TypeScript.

Known problems

  • Autoplay doesn't work for WebRTC in Safari read more.

HTML5

1. Autoplay video tag

Video auto play is not working

Recently many browsers can only autoplay the videos with sound off, so you'll need to add muted attribute to the video tag too


<video id="video" autoplay controls playsinline muted></video>

2. [Safari] pc.createOffer

Don't work in Desktop Safari:

pc.createOffer({offerToReceiveAudio: true, offerToReceiveVideo: true})

Should be replaced with:

pc.addTransceiver('video', {direction: 'recvonly'});
pc.addTransceiver('audio', {direction: 'recvonly'});
pc.createOffer();

3. pc.ontrack

TODO

pc.ontrack = ev => {
    const video = document.getElementById('video');

    // when audio track not exist in Chrome
    if (ev.streams.length === 0) return;

    // when audio track not exist in Firefox
    if (ev.streams[0].id[0] === '{') return;

    // when stream already init
    if (video.srcObject !== null) return;

    video.srcObject = ev.streams[0];
}

Chromecast 1

2023-02-02. Error:

InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'. 'unified-plan' will become the default behavior in the future, but it is currently experimental. To try it out, construct the RTCPeerConnection with sdpSemantics:'unified-plan' present in the RTCConfiguration argument.

User-Agent: Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.47 Safari/537.36 CrKey/1.36.159268

https://webrtc.org/getting-started/unified-plan-transition-guide?hl=en