blog

クローム音声自動再生問題

テストした結果、やはり音声はうまくいきません。iframe内の音声は、自動再生や呼び出し再生方式を設定しても、トップページで直接対応する設定や操作と同じ現象になります。 video要素はミュートしてい...

Jan 6, 2021 · 2 min. read
シェア

chrome、safari、firefoxはすべて、あるバージョンの後にオーディオの自動再生を制限しています:play() failed because the user didn't interact with the document first

クローム自動再生ポリシーの変更

in order to improve the user experience, minimize incentives to install ad blockers, and reduce data consumption on expensive and/or constrained networks

広告ノイズがユーザーに与える影響を軽減し、トラフィックを節約することです。

解決方法

  1. クロームで、次のように入力します: chrome://flags, "Autoplay policy "を検索してください、デフォルトは "Default "です、"No user gesture is required "に変更してください。ただし、これは1つのクライアントに対してのみローカルで設定することができ、最終的な解決策ではありません。
  2. 手動で再生を呼び出し、コールバックで再生が成功したかどうかを判断し、再生が失敗した場合は、$message.warning('お使いのブラウザは再生を制限しています。再生をクリックしてください')のように、再生ボタンをクリックするよう明示的に促すか、再生ボタンを表示してこのボタンをクリックするよう誘導します。
var promise = document.querySelector('audio').play(); if (promise !== undefined) { promise.then(_ => { // Autoplay started! }).catch(error => { // Autoplay was prevented. // Show a "Play" button so that user can start playback. }); }

AudioContext

ネット上ではAudioContextを使えば自動再生ができると言われていますが、これは不可能です:

The Web Audio API will be included in the Chrome autoplay policy with M71 (December 2018).

AudioContextは2018/12から自動再生が禁止されました。

Chrome autoplay policyなぜこのようなことを言う人がいるかというと、2018年4月からchromeに実装されましたが、その時点ではAudioContextはまだプロトコルを実装しておらず、audioタグだけが実装していたからです

iframe

公式サイトには別の声明があります。

<!-- Autoplay is allowed. -->
<iframe src="https://cross-.com/.html" allow="autoplay">
 
<!-- Autoplay and Fullscreen are allowed. -->
<iframe src="https://cross-.com/.html" allow="autoplay; fullscreen">

試したところ、やはりiframe内の音声は無効で、自動再生や呼び出し再生方式を設定しても、トップページで直接対応する設定や操作をしても現象は同じでした。

ios

$(document).on('JSBridgeReady',()=>{ 
 if(player.tag)
 {
 player.tag.play();
 }
 });

video

video 要素がミュートされている場合は自動的に再生できますが、chrome によると、後続の実装では必ずしも保証されません。そのため、動画を再生できるかどうかを判断し、再生できない場合は

window.open

試した結果、クロームには裏技があり、window.openで開いた同じドメイン名のウェブページは自動再生できるのですが、このウェブページは更新しても自動再生できないことがわかりました;

他のブラウザではテストされていません

この点を利用することができるかもしれない、シナリオの私の使用は、システムのクリックで電話をダイヤルするには、Bシステムを開き、自動的に電話をダイヤルされ、この状況を利用するために使用することができますこのドア、ウィンドウを開くことができますソフト電話のBシステムを開いた後、ページと対話することなく、音声の反対側の後に直接聞くことができます!

クロームの実装のバグかどうかはわからないので、この方法は議論の余地があります。

Read next

Hibernate Validator 検証パラメータ完全攻略

1.はじめに データフィールドは一般的にビジネス要件とデータベース設計に従うので、バックエンドのパラメータ検証は必要であり、アプリケーションは入力データが意味的に正しいことを確認するための何らかの手段でなければなりません。 2.データ検証のペインポイント データが意味的に正しいことを保証するためには、検証ロジックを処理するために多くの判断を下す必要があります。また、プロジェクトを重ねることで、検証の重複が発生し、大規模な...

Jan 6, 2021 · 7 min read