2019年12月18日
プログラミング
Safariで動画と音声が再生されない場合の解決方法
はじめに
新しい技術にチャレンジし続けるpalanのアドベントカレンダー Day18です!
昨日は「3D空間上に2DのUIを重ねる【これからはじめるReact360】」という記事でした。
本日は「Safariで動画と音声が再生されない場合の解決方法」という記事を書いてきます!
Safariでは自動再生の規制により、動画と音声が再生されないことがあります。
コードを修正すれば解決できるので、今回はその方法をご紹介していきます。
事象の確認
動画および音声を自動再生したい場合は、autoplay
をつけるのですが、Safari だけ効きません。
よく「再生できない」といわれる事象の原因は、この自動再生の挙動による可能性がかなり高いです。
<video id="video" class="video" src="./video.mp4" autoplay="autoplay" width="300" height="150"></video>
<audio id="audio" class="audio" src="./audio.mp3" autoplay="autoplay"></audio>
ページの読み込み完了後だったり…
window.addEventListener(‘load’, () => {
video.play();
audio.play();
});
弊社のWebAR案件で使用している、aframe-ar.js のマーカー検出後だったり…
marker.addEventListener('markerFound', () => {
video.play();
audio.play();
});
上記のタイミングで無理やり再生させようとしてもうまくいきません。
自動再生できない理由って?
なぜ自動再生できない仕様になったのか調べてみました。
・大きな容量のファイルのユーザーの同意なしに読み込ませないため
・広告の動画がいきなり音声付きで再生されることを防ぐため
と、すごく納得できる内容です。
ユーザーに優しいけど開発者には厳しいですね…。
じゃあどうすれば良いの?
クリックやタップなどユーザーのアクションが必要となります。
UIとしてパッと思いついたのは下記の2パターンです。
A : 再生停止ボタン
B : モーダル内ボタン
弊社で実装したことがあり自動再生っぽく見えておすすめなのは、
Bのモーダル内ボタンなので実例を見てみましょう。
音楽の世界が拡張して目の前にも現れた
かっこいいと思いませんか…?😳#1日1WebAR 5日目は音楽を拡張するWebARです!😎音楽を流したら現実の世界も合わせて変化する、なんて未来がきたら
「音楽を聞く体験」も変わりそうですよね!#1day1WebARhttps://t.co/dhtdTct3UW pic.twitter.com/IQnnsUiIxu— palanAR(パラナル) (@palanar_webar) December 5, 2019
処理の流れ
1 : ボタン(モーダル内のCLOSE)をタップ
2 : 動画をミュートにして再生
3 : すぐに動画を停止してミュート解除
4 : 動画の開始秒数を 0 に戻す
5 : 任意のタイミング(マーカー認識)で動画を再生
コード
※SP用にtouchstartイベントを使用しました。
// タップを検出したら...
button.addEventListener('touchstart', () => {
audio.muted = true; // ミュート有効
audio.play(); // 動画再生
audio.pause(); // 動画停止
audio.muted = false; // ミュート無効
audio.currentTime = 0; // 開始秒数を戻す
});
// マーカー認識されたら...
marker.addEventListener('markerFound', () => {
audio.play(); // 動画再生
});
まとめ
今回は「Safariで動画と音声が再生されない場合の解決方法」をご紹介しました。
メディアの挙動はブラウザ間での違いが大きいので、この記事で解決できた方がいると嬉しいです…!
参考・リンク
プログラミングのお仕事に関するご相談
Bageleeの運営会社、palanではプログラミングに関するお仕事のご相談を無料で承っております。
zoomなどのオンラインミーティング、お電話、貴社への訪問、いずれも可能です。
ぜひお気軽にご相談ください。
この記事は
参考になりましたか?
4
0
関連記事
簡単に自分で作れるWebAR
「palanAR」はオンラインで簡単に作れるWebAR作成ツールです。WebARとはアプリを使用せずに、Webサイト上でARを体験できる新しい技術です。
palanARへpalanでは一緒に働く仲間を募集しています
正社員や業務委託、アルバイトやインターンなど雇用形態にこだわらず、
ベテランの方から業界未経験の方まで様々なかたのお力をお借りしたいと考えております。
運営メンバー
Eishi Saito 総務
SIerやスタートアップ、フリーランスを経て2016年11月にpalan(旧eishis)を設立。 マーケター・ディレクター・エンジニアなど何でも屋。 COBOLからReactまで色んなことやります。
sasakki デザイナー
アメリカの大学を卒業後、日本、シンガポールでデザイナーとして活動。
やまかわたかし デザイナー
フロントエンドデザイナー。デザインからHTML / CSS、JSの実装を担当しています。最近はReactやReact Nativeをよく触っています。
Sayaka Osanai デザイナー
Sketchだいすきプロダクトデザイナー。シンプルだけどちょっとかわいいデザインが得意。 好きな食べものは生ハムとお寿司とカレーです。
はらた エンジニア
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています
こぼり ともろう エンジニア
サーバーサイドエンジニア。SIerを経て2019年7月に入社。日々学習しながらRuby on Railsを使った開発を行っています。
ささい エンジニア
フロントエンドエンジニア WebGLとReactが強みと言えるように頑張ってます。
Damien
WebAR/VRの企画・開発をやっています。森に住んでいます。
ゲスト bagelee
かっきー
まりな
suzuki
miyagi
ogawa
雑食デザイナー。UI/UXデザインやコーディング、時々フロントエンドやってます。最近はARも。
いわもと
デザイナーをしています。 好きな食べ物はラーメンです。
taishi kobari
フロントエンドの開発を主に担当してます。Blitz.js好きです。
kubota shogo
サーバーサイドエンジニア。Ruby on Railsを使った開発を行いつつ月500kmほど走っています!
nishi tomoya
aihara
グラフィックデザイナーから、フロントエンドエンジニアになりました。最近はWebAR/VRの開発や、Blender、Unityを触っています。モノづくりとワンコが好きです。
nagao
SIerを経てアプリのエンジニアに。xR業界に興味があり、unityを使って開発をしたりしています。
Kainuma
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています
sugimoto
asama
ando
iwasawa ayane
oshimo
異業界からやってきたデザイナー。 palanARのUIをメインに担当してます。 これからたくさん吸収していきます!