ブラウザ
メインのブラウザーはHTML5とTheoraをサポートしているように見えますが、通常はかなりの曲率を持っています。 最も普通のブラウザはまだFireFoxですが、十分な不具合や奇妙な点もあるので、始めましょう。
Firefox
- 3.5ブランチの最初のバージョンでは、アスペクトはoggコンテナで公開されたものを受け入れませんでした。3.5の最新バージョンでは、これは修正されました。 このため、特にmpgファイルをトランスコードする際に状況が変わりました。
- FireFox 3.5。*ビデオ/オーディオタグでは、controls = "controls"(標準で記述)を使用してコントロールメニューを表示する指示を受け入れないため、controls = "true"を使用する必要があります。 ブランチ3.6では、これはすでに修正されています。
- FireFox 3.5。*「[theora @ 0xac90c0] Missing extradata!」という小さな「間違った」ファイルの再生を拒否しました。 3.6では、この問題は解決されました。
- 一部のビデオでは、まったく音が出ないというまったく奇妙な方法があります。 これは3.5と3.6の両方にあります。
- 多くの場合、音が遅く、オーディオ/ビデオは別々に行きます。 多くの場合、このような非同期化は20秒に達し、時にはすぐに、時にはトラックの途中で行われます。
- バージョン3.6でのみ、フルスクリーンで視聴できました。 その前に、JSでハックを使用する必要があります(コードは非常に単純で愚かです):
document.getElementById('video_post').style.position='absolute';
document.getElementById('video_post').style.left=0;
document.getElementById('video_post').width=window.innerWidth;
return false;
クロム
WindowsのChrome3ではすべて問題ありません。いずれの場合も問題は見つかりませんでしたが、あまりテストしませんでした。 主な不満はすべて、4つの支社のChromiumに対するものであり、現在はすべての主要なOSに存在しています。
- Chromium 4および5(Linux)の最も重要な問題は、コントロールメニューが機能せず、ビデオが中央に貼り付いて無限ループに入ることです。 誰かが興味を持っているなら、このバグ: code.google.com/p/chromium/issues/detail?id=26036 。 このバグのWindowsまたはMacOSXバージョンでは存在しない可能性があります。 私のサイトでは、4バージョンのchromeを定義し、コントロールをオフにし、それらの代わりに次のコードを挿入します。
document.getElementById('video_post').play();return false;
プレイ用。
document.getElementById('video_post').pause();return false;
一時停止します。
document.getElementById('video_post').controls='true';return false;
制御を有効にします。
これらのピースは、a、img、およびその他のタグでonlickに挿入できます。 このような「ピース」を使用すると、SVNとの次の同期時に最小限の制御でビデオを視聴し、制御を確認することができます。
- ビデオが完全に機能しない場合や、音声のみが機能する場合があります。
- 全画面モードはありません。上で引用したJSコードも使用する必要があります。
- このため、サイズ変更時にバイリニアまたは同様のフィルタリングは行われず、ピクセルが表示されます。
サファリ
Theora はQuickTimeプラグインをインストールした後にのみ有効になりますが、その後はすべてが完全に機能し、Theoraは組み込まれていませんが、最も問題のないブラウザです。 フルスクリーンは存在せず、いつものようにJSに役立ちます。
オペラ
一方、すべての安定バージョンではビデオタグは表示されませんが、アルファバージョン0.50_pre6177(Linux)より前では既にビデオが再生されますが、問題があります。
- コントロールのスライダーは機能しません。 プレイして一時停止します。
- ビデオは、ダブルバッファを使用していないように、速度が低下する(プロセッサが同時に読み込まれない)ように周期的に動いています。
QtWebkit
LinuxのPhononeにGstreamerが含まれている場合、QtWebkitに基づくブラウザーはオーディオを(ビデオなしで)不十分に再生できます。
Gtkwebkit
誰かが共有できるかどうかを確認しませんでした! とても興味深い。
コーディング
私はあまり遠くに行かず、ffmpeg2theoraを使用しました。 かなり長い実験の結果、YouTubeより
ffmpeg2theora --speedlevel 0 --optimize -S 0 -v 6 -a 3 -x 480 -H 44100
ない品質を
ffmpeg2theora --speedlevel 0 --optimize -S 0 -v 6 -a 3 -x 480 -H 44100
最適なエンコードパラメーターを見つけました:
ffmpeg2theora --speedlevel 0 --optimize -S 0 -v 6 -a 3 -x 480 -H 44100
コーディングの目的で、Gstreamerを使用することもできますが、将来このような実験を実行する予定です。
それで、これの問題は何でしたか:
- 0.25より前のバージョンでは、Aspectはしばしば誤って断片に引き裂かれ(より正確には、単に無視されました)、この問題はFireFoxのAspectの問題に関係なく存在します。
- MP4! Toliコンテナは絶対にバカか、それをバカにするプログラムです。 しかし、最終的には、.mp4でビデオに対して1つのFPSが記録され(正直なところffmpeg2theoraが使用されます)、ビデオストリーム自体では別のFPSが使用されます。 このため、ビデオ/オーディオの同期解除が発生します。 そのようなビデオを硬化すると、(常にではありません!).mp4コンポーネントを解析し、Linuxの標準ユーティリティを使用して再構成できます。 mplayerなどのプレーヤーは、「ビートのある」mp4ファイルを再生する最初の数秒間はmp4からの情報を使用しますが、ビデオストリームからの情報に従ってすばやく同期します。
- サーバーにTheoraのエンコードをまだロードしたくなかったため、非常にシンプルな分散エンコードシステムを作成しました。 ディレクトリ構造(pre_buf、pre、proc、err、out)でサーバー上にフォルダーが作成され、ビデオをエンコードするコンピューターによってNFSにマウントされます。 ビデオがサーバーにアップロードされると、最終アップロードの後、pre_bufの別のフォルダーで実行され、一気にpreに転送されます。 処理マシンでは、「クラウン」で実行されているスクリプトがあり、preフォルダー内の最初のフォルダーを見つけてprocフォルダーに転送し(成功し、遅くない場合)、処理が開始されます。 結果はoutまたはerrフォルダーに格納されます(エラーの場合)。 サーバーでは、出力されたerrフォルダーも「クラウン」によってスキャンされ、これに基づいてデータベースが修正され、フォルダーが外部から公共の場所に転送されます。 したがって、メインサーバーを簡単にオフロードできます。
Webサーバー。
判明したように、すべての束が通常、視聴用のビデオを提供できるわけではありません。 最初はlighttpd-scgi-python / Pylonsを使用しましたが、ビデオはほとんど再生されませんでした(ジャーク、アーティファクトなどがありました)。その結果、すべての静的ファイルを別のドメインに配置し、lighttpdから直接アクセスを実装しました。 ここでは、Lighttpd(Youtubeも使用)を使用して、すべてが必要に応じて直接判明しました。 さらに、ogtp、oga、oggがlighttpdのMIMEタイプではない可能性がまだあります。それらをそこに追加する必要があります。
私は何も忘れていないようです:)そして、この記事がHTML5-video / Theoraの現在の問題をナビゲートするのに役立つことを願っています。