Возможно ли отключить звук всей веб-страницы с помощью javascript?

#javascript #webrtc #html5-audio

#javascript #webrtc #html5-аудио

Вопрос:

У меня есть веб-страница, на которой воспроизводится непрерывная прямая трансляция, но я хочу, чтобы пользователи могли видеть и слышать ее только в определенное точное время. Я не хочу, чтобы им приходилось постоянно отключаться и повторно подключаться, поскольку это занимает непредсказуемое количество времени.

Когда пользователь загружает страницу, прямая трансляция запускается автоматически (приглушенная и скрытая — см. Ниже), и пользователю придется включить видео (даже если они его еще не видят), но я не хочу, чтобы они действительно слышали прямую трансляцию до отведенного времени. Я не хочу, чтобы им приходилось вручную включать видео в выделенное время — моя цель — чтобы все были подключены и работали стабильно, чтобы (например) в 10:04:30 точно каждый мог видеть и слышать прямую трансляцию в течение 30 секунд, затем она исчезает (и отключается) до следующего раза (скажем) в 10:07:15 и так далее. и так далее. Процесс должен происходить таким образом, чтобы пользователь мог откинуться на спинку кресла и не использовать мышь или клавиатуру после начальной загрузки страницы и включения прямой трансляции.

Работа с видеозаписью проста — я могу просто показать / скрыть div с черным фоном, который закрывает видео, но я не уверен, как справиться со звуковой стороной вещей. Можно ли отключить / включить веб-страницу в целом? Существуют ли другие способы достижения этой цели?

Другая возможная перспектива заключается в том, чтобы каким-то образом сделать это в исходном коде, подключив издателя и начав публикацию, но отправляя пустое видео / аудио до нужного времени, а затем переключая то, что отправляется. Опять же, это необходимо сделать без необходимости повторного подключения издателя или каких-либо действий вручную.

Издатель и зрители подключаются с помощью WebRTC.

Ответ №1:

Предполагая что-то вроде следующего:

 <video id="vid" ...></video>
<div id="controls" ...>
  <button id="mute-btn">Mute</button>
</div>
  

Тогда вам нужно что-то вроде этого:

 const vid = document.querySelector('#vid')
const muteBtn = document.querySelector('#mute-btn')

vid.muted = true

window.userHasUnmuted = false
window.liveStreamStarted = false

muteBtn.addEventListener('click', () => {
  window.userHasUnmuted = true

  if (window.liveStreamStarted) {
    vid.muted = false
  }
}

// then, in callback for whenever live-stream starts...

if (window.userHasUnmuted) {
  vid.muted = false
}
  

Оригинальный ответ ниже

Чтобы отключить звук одного элемента audio или video :

 audioOrVideoElement.muted = true
  

Чтобы отключить звук всех audio элементов video на странице:

 document.querySelectorAll('audio, video').forEach(el => el.muted = true)
  

И наоборот, установка muted на false повторно включает звук из этого элемента.

Для более точной настройки элементов управления звуком вы также можете установить volume (в диапазоне 0..1 ) элемента, например:

 document.querySelectorAll('audio, video').forEach(el => el.volume = 0.3)
  

Комментарии:

1. В основном мне интересно, есть ли способ отключить страницу в целом, а не отдельный элемент (или каждый отдельный элемент в forEach цикле), так что, когда пользователь выполняет первоначальное включение, нет возможности включить краткий фрагмент звука, прежде чем я его отключу.

2. @BenHolness Отредактировал мой ответ — распространяется ли это на ваш вариант использования? Если нет, вам нужно будет предоставить более подробную информацию.

3. Возможно — мне нужно реализовать и попытаться убедиться. Меня больше всего беспокоит то, что (насколько я понимаю) вы не можете автоматически включить изначально отключенное автоматически воспроизводимое видео — оно должно исходить от действия кнопки, инициированного пользователем, поэтому я не уверен, будет ли принят обратный вызов unmute.

4. Вы могли бы отключить автоматическое воспроизведение всех видео, а при загрузке видео / аудио начать их воспроизведение. вы можете добавить ‘автозагрузку данных’ для этих элементов и прикрепить соответствующий прослушиватель загрузки к элементам с этим атрибутом.

5. @BenHolness Совсем нет. Попробуйте добавить скрипт Tampermonkey для YouTube, содержащий setTimeout(() => { document.querySelector('video').muted = false }, 5000) . Отключите звук вашего видео на YouTube, обновите страницу, и все будет работать отлично.