<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MediaElement &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/mediaelement/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Sat, 21 Dec 2013 01:10:28 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>&#034;Video&#034; &#8211; Alphabetical Advent Calendar 2013</title>
		<link>https://blog.mach3.jp/2013/12/21/jaac2013-v-video.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Sat, 21 Dec 2013 01:10:28 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Advent Calendar 2013]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[MediaElement]]></category>
		<category><![CDATA[Video]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3778</guid>

					<description><![CDATA[&#8220;V&#8221; は video の &#8220;V&#8221;。 Video 古くは Flash だったり wmv だったりしたWeb上での動画ファイルの再生も、 最近では HTML5 で追加された  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>&#8220;V&#8221; は video の &#8220;V&#8221;。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-0EyMicsS5I0/UqR4mEQ-BGI/AAAAAAAACYg/_vfWt_n5kgs/s400/ac2013-v.png" alt="V"/></figure>



<p></p>



<span id="more-3778"></span>



<h2 class="wp-block-heading">Video</h2>



<p>古くは Flash だったり wmv だったりしたWeb上での動画ファイルの再生も、 最近では HTML5 で追加された <strong>video</strong> 要素のおかげで統一化が図られています。 勿論IE8以下ではサポートしていないので Flash 等で対応してあげる必要がありますが、 その辺の面倒をしっかり見てくれるライブラリも公開されています。</p>



<h2 class="wp-block-heading">video 要素</h2>



<p>まずは <strong>video</strong> 要素を簡単におさらいします。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">video</span> <span class="hljs-attr">poster</span>=<span class="hljs-string">"img/poster.jpg"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"my-video"</span> <span class="hljs-attr">controls</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">source</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"movies/movie.mp4"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"video/mp4"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">source</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"movies/movie.webm"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"video/webm"</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">video</span>&gt;</span>
</code></span></pre>


<p>video 要素は <strong>source</strong> 要素をぶらさげ、形式ごとに動画ファイルを列挙していきます。 video の src 属性で指定する事もできますが、ブラウザ環境ごとに再生が出来る形式が限定されているので、 複数の形式を連ねて再生可能な形式で再生する方法が広く使われます。 どの環境でどの形式がサポートされているかは下記URLにて詳細がまとめられています。</p>



<ul class="wp-block-list">
<li><a href="https://developer.mozilla.org/ja/docs/Web/HTML/Supported_media_formats#Browser_compatibility">HTML5 の audio 要素と video 要素でサポートされているメディアフォーマット &#8211; HTML | MDN</a></li>
</ul>



<h3 class="wp-block-heading">ムービーのコントロール</h3>



<p>video 要素の元となる <strong>HTMLMediaElement</strong> には動画の再生をコントロールするメソッドがぶら下がっているので、 それを利用して操作する事ができます。ブラウザによっては他にもメソッドも独自に実装されている事があります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> video = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"#my-video"</span>);
...
video.load(); <span class="hljs-comment">// ビデオのロード</span>
video.play(); <span class="hljs-comment">// 再生</span>
video.pause(); <span class="hljs-comment">// 停止</span>
</code></span></pre>


<h3 class="wp-block-heading">ムービーのシーク</h3>



<p>動画の指定した時間へのジャンプは <strong>currentTime</strong> プロパティの値を変更する事で可能です。 currentTime プロパティは通常の呼び出しでは現在の再生位置を返しますが、 値を指定する事でその再生位置にジャンプする事が出来ます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">video.currentTime; <span class="hljs-comment">// 12.345 など（再生位置を秒で返す）</span>
video.currentTime = <span class="hljs-number">30</span>; <span class="hljs-comment">// 30秒の位置に移動する</span>
</code></span></pre>


<p>しかし、currentTime に代入してシークを行おうとした場合にエラーが発生する場合があります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable</p>
</blockquote>



<p>これは動画ファイルの情報がまだ利用可能でない為起こる様です。 他の外部リソース同様にメタ情報のロードを待つ必要がありますね。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">video.addEventListener(<span class="hljs-string">"loadedmetadata"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
    e.target.currentTime = <span class="hljs-number">30</span>;
}, <span class="hljs-literal">false</span>);
</code></span></pre>


<p>この他にも多くのプロパティが実装されているので、 JavaScript でさらに進んだ処理をしたい時は <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#htmlmediaelement">W3Cのページ</a> を訪れてみましょう。</p>



<h2 class="wp-block-heading">ビデオプレイヤーライブラリ</h2>



<p>限られた環境で動画を再生するだけならば素のまま使えば良いのですが、 やはりどうしてもレガシーな環境に対応しなければならない時があります。 面倒な部分は優秀なライブラリにお願いしてしまいましょう。</p>



<h3 class="wp-block-heading"><a href="http://www.videojs.com/">Video.js</a></h3>



<p><a href="http://www.videojs.com/">http://www.videojs.com/</a></p>



<p><strong>Video.js</strong> は Flash をフォールバックに使用しているプレイヤーライブラリです。 スタイルシートとJavaScriptファイルを読み込み、video 属性に専用のクラスを指定して使用します。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">video</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"my-video"</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"video-js vjs-default-skin"</span>&gt;</span> ... <span class="hljs-tag">&lt;/<span class="hljs-name">video</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="actionscript">
<span class="hljs-keyword">var</span> player = videojs(<span class="hljs-string">"my-video"</span>, { <span class="hljs-comment">/* options */</span> });
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>プレイヤーに好みのスキンを着せる事が出来るのが特徴で、 ブラウザ上でプレビューを確認しながらスキンを編集出来るツールも公開しています。 スタイルの編集は Less で行う事ができます。</p>



<ul class="wp-block-list">
<li><a href="http://designer.videojs.com/">Video.js | Video Player Skin Designer</a></li>
</ul>



<p>Video.js の <a href="https://github.com/videojs/video.js/blob/master/docs/api/vjs.Player.md">API</a> は、 イベント・メソッドの名前や仕様などが MediaElement API に倣った形になっています。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">player.on(<span class="hljs-string">"loadedmetadata"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{ ... }); <span class="hljs-comment">// on メソッドでイベントの設定</span>
player.play(); <span class="hljs-comment">// 再生</span>
</code></span></pre>


<h3 class="wp-block-heading"><a href="http://mediaelementjs.com/">MediaElement.js</a></h3>



<p><a href="http://mediaelementjs.com/">http://mediaelementjs.com/</a></p>



<p><strong>MediaElement.js</strong> は、Flash や Silverlight のプレイヤーを使い、 古いブラウザでも HTML5 の MediaElement の API を使用出来るように振る舞ってくれます。 多くのCMS向けのプラグインが公開されており、WordPress はコアにバンドルされているそうです。 動作には jQuery が必要です。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">video</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"my-video"</span>&gt;</span> ... <span class="hljs-tag">&lt;/<span class="hljs-name">video</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
    <span class="hljs-keyword">var</span> player = <span class="hljs-keyword">new</span> MediaElementPlayer(<span class="hljs-string">"#my-video"</span>, <span class="hljs-comment">/* options */</span>);
    <span class="hljs-comment">// あるいは</span>
    <span class="hljs-keyword">var</span> $media = $(<span class="hljs-string">"#my-video"</span>).mediaelementplayer({ <span class="hljs-comment">/* options */</span> });
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>プレイヤーの初期化は <strong>MediaElementPlayer</strong> から生成するか、 <strong>$.fn.mediaelementplayer</strong> を使用して行います。 それぞれ返り値が違うので注意しましょう。</p>



<h3 class="wp-block-heading">ライブラリ使用上の共通の注意</h3>



<p>video 要素に対応していないブラウザで使用する場合は、 html5shiv や Modernizr 等で video 要素へのCSSの適用を有効化しておかなければなりません。 あるいは手作業で対応しておきましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">"video"</span>);
<span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">"audio"</span>);
</code></span></pre>


<p>また、古い環境でエミュレートしてくれるといっても、 コールするタイミングによっては使えなかったり、細かい点で本来の物と挙動が異なってしまったりします。 結局中でIE用の処理を分けざるをえない、といった状況は結構ありますので、がんばりましょう。</p>



<h2 class="wp-block-heading">参考資料</h2>



<ul class="wp-block-list">
<li><a href="https://developer.mozilla.org/en/docs/Web/HTML/Element/video">video &#8211; HTML | MDN</a></li>



<li><a href="https://developer.mozilla.org/ja/docs/Web/HTML/Supported_media_formats">HTML5 の audio 要素と video 要素でサポートされているメディアフォーマット &#8211; HTML | MDN</a></li>



<li><a href="http://www.videojs.com/">HTML5 Video Player | Video.js</a></li>



<li><a href="http://mediaelementjs.com/">MediaElement.js &#8211; HTML5 video player and audio player with Flash and Silverlight shims</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
