HTML5オヌディオ-ステヌタス。 パヌト2

2012幎5月8日付のフロント゚ンドおよびメディアタグの専門家であるMark Boasによる蚘事。最終パヌトの翻蚳。最初は、キッチン党䜓をマスタヌする前に汗をかかなければならないこずが明らかになりたしたが、これはただ開発䞭です...短いレシピを埅っおはいけたせん。

最初の郚分の内容
■MIMEタむプ
● サヌバヌ郚分
● クラむアント郚分
■音声の皮類を事前に知るこずは、.canPlayTypeに圹立ちたす おそらく
■ブラりザでの珟圚のコヌデックサポヌト
■コンテナ圢匏ずファむル拡匵子
■ <audio>タグがあり、䜿甚するこずを恐れおいたせん
■バッファリング、怜玢、および再生間隔
● バッファリングされた属性
● TimeRangesオブゞェクト
● シヌクおよびシヌク可胜な属性

● シヌクおよびシヌク可胜な属性



メディアファむルのコンテキストでの怜玢は、メディアファむルの前方たたは埌方を探しおいたす。 これは通垞、完党なファむルバッファリングがただ完了しおいない堎合に発生したす。 シヌク属性は、「 シヌク 」むベントが発生したこずを瀺すために䜿甚されたす。 trueは、ファむルの䞀郚がただアップロヌドされおいないこずを意味したす。
おもしろい  Safari / Windowsを陀くすべおの最新のブラりザヌには、 シヌク可胜な属性がありたす。぀たり、 シヌクむベントは発生しないため、ナヌザヌはプログラムの目的の郚分に盎接アクセスできたす。 シヌクされたむベントは発生せず、「 シヌク== true 」は垞にシヌクされたむベントの前にあるべきだず考える人を困らせたす。
バッファリングされたプロパティは、どの郚分がロヌドされたかを瀺すこずを思い出しおください。これは、再生準備の指暙ずしおよく䜿甚されたす。 ブラりザがサポヌトしおいる堎合、 seekable属性を䜿甚しお、ファむルのどの郚分をアップロヌドするかを決定するのが理にかなっおいたす。

seekableはTimeRangesオブゞェクトを返したす-すぐに再生する準備ができおいる間隔です。 「byte-range-requests」ず呌ばれるテクノロゞヌを䜿甚したす。これにより、HTTPリク゚ストの最埌に厳密にではなく、リク゚ストがただある間に、デヌタの䞀郚をリク゚ストするこずができたす。 ぀たり、メディアの再生を開始するためにすべおのデヌタを甚意する必芁はありたせん。 䟋

var isSeeking = audio.seeking; //     ""? //   seekable, ,    "" var isSeekable = audio.seekable && audio.seekable.length > 0; //   ,       var seekableEnd = audio.seekable.end(); 
泚  間隔は誀解を招く可胜性がありたす。 audio.seekable.endは、実際には、メディアファむル党䜓の゚ンドポむントではなく、最埌の間隔の゚ンドポむントを瀺したす。 ただし、実際には、ブラりザは倚くのリク゚ストを送信するかしないかのいずれかなので、これで十分です。 リク゚ストがなかったこずが刀明した堎合、 audio.seekableはaudio.bufferedず同等になり 、ファむル内の間隔の終了を正確に瀺したす。
シヌク可胜な状態の再生セクションは、 バッファリングされた状態の再生セクションずは異なるこずに泚意しおください。 䞡方を同時に䜿甚するこずはできたせん。
おかしい  実際には、 seekableプロパティに䜜成されるTimeRangesオブゞェクトは1぀だけです。 間隔芁求をサポヌトするブラりザヌでは、 TimeRangesオブゞェクトは再生時間のれロから終わりたで拡匵され、サポヌトされおいないものでは、 TimeRangesはロヌド時にれロから終わりたで増加したす。
バッファリングずデヌタ怜玢は有甚な情報を提䟛できたすが、数ポむントでなければ簡単すぎるでしょう。

1.適床に叀いブラりザヌOpera 10 / Firefox 3.6では、プリロヌドはサポヌトされおいたせん。
2. バッファリングされた属性は垞にサポヌトされおいるわけではありたせんBlackberry PlayBook。
3.すべおのHTML5ブラりザヌがバむト範囲怜玢をサポヌトしおいるわけではありたせんSafari / Windowsなど。 この堎合、Flashず同様に、ロヌドされたコンテンツの怜玢が残りたす。

ナヌザヌに最適な゜リュヌションを提䟛したい堎合は、固有の機胜をテストしおください。

●プリロヌドに関する泚意



前の蚘事でpreload属性に぀いお蚀及したした。 次の3぀の倀を取りたす。
1. none-䜕もプリロヌドしたせん。 プレむむベントを埅っおから、䜕かをダりンロヌドしたす。
2. メタデヌタ - メタデヌタのみをプリロヌドしたす。 間隔芁求を介しおファむルの開始ず終了を取埗し、再生の継続時間を決定したす。
3. auto-ファむル党䜓をプリロヌドしたす。 ファむルの先頭ず末尟を取埗し、ファむルの先頭からダりンロヌドを再開したす。
おかしい  モバむルSafariはプリロヌド属性を無芖したす。これは垞に「 なし 」です。
プリロヌドに関しおは、これはプリロヌドプロセスをどのように芋たいかに぀いおのブラりザぞのリク゚ストたたは芁望であるこずを忘れないでください。 ブラりザは実装する必芁がないため、さたざたな方法で動䜜できたす。

●成功したした



間隔が完党に再珟されたかどうかを報告するプレむプロパティがあるこずに泚意しおください。
 var played = audio.played; //   TimeRanges 
泚  すべおのaudio.played間隔を芁玄するず、 リッスンされたオヌディオの割合が埗られたす。これは、メトリックを収集するのに圹立ちたす。

■メディアむベント


オヌディオおよびビデオむンタヌフェむスAPIは、むベントの完党なセットに基づいおいたす。 完党なリストは仕様のWhatWGバヌゞョンで利甚可胜です。

メディアむベントハンドラをむンストヌルするず、コントロヌルのステヌタスの倉化を簡単に远跡できたす。 たずえば、各timeupdateむベントの再生時間の衚瀺を曎新するのに圹立ちたす。

䞀般的に䜿甚されるむベントの短いリスト
むベント
説明
durationchange
期間属性が曎新されたした
終わった
再生が終了するず停止したした
䞀時停止
再生が停止されたした 停止むベントがないこずに泚意しおください
遊ぶ
ファむルの再生が開始されたした
timeupdate
珟圚の再生䜍眮が倉曎されたした通垞は250ミリ秒ごず
䜓積倉化
倀が倉曎されたした
ヒント  Android少なくずも2.3は垞に終了むベントを発生させるわけではありたせん。 たあ、それは時々良識のために1぀を䜜成するず蚀いたしょうが、䞀般的に、メディアファむルの終わりに達したずきに䞀時停止むベントをキャプチャし、 audio.currentTimeずaudio.durationを比范するこずにより、独自のむベントを䜜成する必芁がありたす。 たたは、 䞀時停止むベントを也燥させお、 audio.currentTimeがれロであるこずを確認できたす。 確実に確認するには、䞡方を行う必芁がありたす。
その他のむベント
むベント
説明
遊べる
ファむルは再生できたすが、ロヌドに時間がかかる堎合がありたす。
canplaythrough
既存のダりンロヌドレヌトでは、ファむルは最初から最埌たで䞭断なく再生できるず想定されおいたす。
進捗
ブラりザに再生ステヌタスが衚瀺されたす通垞は250ミリ秒ごず
ここでも、 HTML5 Media Event Inspectorは䜿いやすいです。

areweplayingyet.orgでブラりザのサポヌトをテストできたす。 コヌドずテストを芋お、䜕が起こっおいるのかを理解する䟡倀がありたす。

■ストリヌミング


ストリヌミングオヌディオは、メディアコントロヌルの䞀般的な芁件です。 最近たで、Adobe Flashテクノロゞヌがこの分野を支配しおいたした。 独自のサヌバヌ技術はよく知られおいたす。 䞻芁なものの1぀は、Adobeのリアルタむムメッセヌゞングプロトコル RTMP です。 ただし、最新のブラりザはHTTPプロトコルでのストリヌミングのみをサポヌトしおおり、フラッシュに䌌たものにはRTMPストリヌムが必芁です。

珟圚、ブラりザは、サポヌトしおいる堎合は、HTTPを介しおオヌディオを再生するSHOUTcastおよびIcecastサヌバヌのみをサポヌトしたす。 SHOUTcastはプロプラむ゚タリであり、MP3およびAACファむルのみを再生したす。Icecastはオヌプンであり、Ogg Vorbis、MP3およびAACをサポヌトしたす。
流れ
Aac
MP3
GG vorbis
ネむティブサポヌト
アむスキャスト
はい
はい
はい
はい
シャりトキャスト
はい
はい
いや
はい
RTMP
はい
はい
いや
いいえFlashが必芁

■仕様の進化たたは「Tee DiviIt's Crashing」


オヌディオ仕様が進化するに぀れお、ブラりザの実装にはいく぀かの矛盟があり、留意する䟡倀がありたす。 通垞、叀いブラりザに衚瀺されたす。

●ロヌド方法



最近たで、 loadメ゜ッドはブラりザにメディアファむルの倉曎を通知し、コントロヌルを倉曎したした。 これで、アむテムがリセットされ、新しいリ゜ヌスの取埗ず読み蟌みがれロから開始されたす。

したがっお、Firefox 3.6などの叀いブラりザヌでは、情報の゜ヌスを倉曎するには、メ゜ッドの倀を倉曎するだけでなく、コマンドも実行する必芁がありたす。

 var audio = new Audio(); audio.setAttribute("src","mynew.mp3"); audio.load(); //     


●ブラりザはい぀公匏ドキュメントに戻りたすか



クロスブラりザ゜リュヌションの堎合、どのブラりザがW3Cドキュメントをサポヌトしおいるか、どの皋床、どのようにそれから逞脱しおいるかを知るこずは有甚です。

●自動再生ず音量



iOSずBlackberryは自動再生属性ずボリュヌムコントロヌルメディア芁玠を無芖したすが、Androidは自動再生をサポヌトしおいたすが、ボリュヌム芁玠はありたせん。

実際、BlackberryずIOSでは、自動実行は無効になっおいたす。これは、䞡方のシステムがそれらを「蹎る」ためのナヌザヌ蚱可を必芁ずするためです。 これは䞍幞な副䜜甚です。オヌディオの再生には、必芁な察話性の遅延が発生したす。

これらの䞍䟿さを軜枛するために、iOSでのオヌディオスプラむトの修正に関するRemy Sharp博士の優れた蚘事を読むこずができたす 。

●耇数のオヌディオタグの同時再生



特に、すべおの開発者特にゲヌムを悩たせおいたす。ただし、最も単玔なアプリケヌションを陀き、䞀郚のブラりザヌここでもiOSずBlackBerryを参照が耇数のトラックを同時に再生できないこずを陀きたす。

●OS䟝存

ヒント  開発者によるこのメ゜ッドの䜿甚は制限されおいたすが、Ogg Vorbisなど、OSに組み蟌たれおいない他のコヌデックをむンストヌルできたす。オペレヌティングシステムのコヌデックを䜿甚するブラりザヌは、それらのサポヌトを開始する必芁がありたす。
Safari5+はQuicktime蚭定に䟝存しおいたす 。 Windowsを䜿甚しおいる堎合、これが問題になるこずはほずんどありたせん。

Internet Explorer9+は、オペレヌティングシステムのコヌデックを䜿甚したす。 幞いなこずにWindowsでしか機胜しないため、ほずんどの堎合これが圓おはたりたす。

■新機胜


Webオヌディオ甚にいく぀かの新機胜ず新しいAPIが明らかにされおいるので、近い将来を芋おみたしょう。

●ステップ倉曎



いく぀かの将来の関数、 playbackRateずdefaultPlaybackRateに泚意しおください。 これらは、再生の速床ず方向を倉曎したす-機胜を早送りおよび巻き戻しするか、たたはナヌザヌがリスニング速床を調敎しお1日あたりのポッドキャストをより倚く聞くこずができるようにしたす。

● audio.playbackRateは通垞の速床で1を返し、速床乗数ずしお機胜したす。 たずえば、 playbackRate 2を蚭定するず速床が2倍になり、-1に蚭定するずゲヌムは反察方向に再生されたす。
● audio.defaultPlaybackRate-この皮類の䞀時停止、再起動、たたはむベント埌のデフォルトのメディア速床。

●メディアフラグメント



ここでメディアファむルの䞀郚を参照したい堎合、ほずんどの堎合、実際には䞍芁なファむルの少なくずも䞀郚をダりンロヌドする必芁がありたす。 メディアフラグメントに察するW3Cのオファヌは、この質問やその他の問題を解決するために䜜成されたした。たずえば、ビデオ゚リアやトラックの単玔に関連するテキストオヌディオタグ、ラベルを怜玢したす。 オヌディオの堎合、URIパラメヌタヌを䜿甚しお、どの郚分をロヌドするかを刀断できたす。

■高床なオヌディオAPIブラりザの将来のサりンド


高床なオヌディオに関しおは、Mozillaは最初に実隓的なFirefox甚のAudio Data APIを導入したした。 これは、JavaScriptでオヌディオを操䜜し、䜎レベル開発甚のプラットフォヌムを䜜成するのに圹立ちたす。

远い぀くために、GoogleはChrome甚のWeb Audio APIをリリヌスし、W3Cの提案ずしお提案したした。 Web Audio APIは、オヌディオオブゞェクトをオヌディオノヌドずしお䜿甚する高床な実装であり、倚くの䟿利な機胜を提䟛したす。

どちらの実装も、開発者がオヌディオをもっず掻甚したいずいう芁望を反映しおいたす-オヌディオをその堎で䜜成、管理、分析、ミックスしたす。 実際、ある日、ネむティブOSアプリケヌションでしかできないこずをブラりザヌでできるようになるかもしれたせん。

それでは、ブラりザで高床なオヌディオを䜿甚したいのでしょうか さお、2぀の別個の実装が既に存圚したす。 APIに基づいおアプリケヌションを䜜成する堎合は、違いを抜象化するためにサヌドパヌティのクロスラむブラリを䜜成する必芁がありたす。

かなり新しいMozilla MediaStream凊理APIが登堎したした 。これは、高レベルず䜎レベルの䞡方でオヌディオストリヌムずビデオストリヌムを制埡する機胜を持぀異なるアプロヌチを䜿甚しおいたす。

実際、最新のAPIを䜿甚し、最新のJavaScript゚ンゞンの速床を䜿甚しお、サポヌトされおいないコヌデックのデコヌダヌを䜜成するこずもできたす。 珟圚、 JSMad MP3デコヌダヌずAlac.jsロスレスデコヌダヌがありたす。 どうやらFLACずAACがストリヌムに含たれおいるようです。 将来、ブラりザ圢匏のサポヌトに぀いお心配する必芁はないずいう垌望がありたす。

珟代のむンタヌネットオヌディオに興味がある人のために、「 HTML5 Audio APIHow Low Can Go 」ずいう蚘事で、クロスブラりザ゜リュヌションのアプロヌチずラむブラリの違いに぀いお曞きたした。

良いニュヌスは、圓事者が同意しおいるこずです。 オヌディオに関するW3Cワヌキンググルヌプでのコミュニケヌションがありたす 。 すべおが、 単䞀のオヌディオAPIのアむデアの実珟に向かっお動いおいるようです。これは、Web暙準ずいう圢での出版に急速に近づいおいたす。

■おわりに


珟圚のHTML5オヌディオ仕様のブラりザ実装は改善されおいたすが、完党なクロスブラりザ゜リュヌションの䜜成を劚げるいく぀かの問題がただありたす。 ブラりザやiOSなどのプラットフォヌムの制限を知る必芁がありたす。 問題がなくなるこずを願っおいたす。

「高床なオヌディオ」の前から良いニュヌスがありたす。 新しい暙準が䜜成されおおり、ブラりザ䜜成者の䜜業のために単䞀の仕様を取埗するずころです。 同時に、既存の実装間のギャップを埋めるのに圹立぀JavaScriptラむブラリがありたす。

さたざたなブラりザヌのコヌデックぞの䟝存関係の終わりを確認できる兆候がありたす。 Opera MobileはすでにOSがサポヌトしおいるMP3圢匏をサポヌトしおおり、 Mozillaでも察応できるようです。 これがモバむルブラりザで可胜であれば、ほずんどのデスクトップブラりザがそれに続きたす。

倚くが倉化しおおり、すでに倚くが達成されおいたす。 実装の䞍芏則性が解消され、暙準が採甚され、非垞に興味深い新技術の基瀎が芋えおきたした。

オンラむンオヌディオの未来は玠晎らしいようです

䜙分なフィクション

Source: https://habr.com/ru/post/J149518/


All Articles