ownCloudは標準プラグインのvideo viewerで動画をブラウザ内で再生できます。しかし(少なくとも僕の環境では)HTML5で動画を生成するとシークができません(主にChrome)。HTML5でなくFlash Playerを使って動画を再生するよう変更すればシークは出来ますが画質があまりよくなく負荷も高いためできればHTML5で再生したいところ。調べたところ問題点ははっきりしていたのでなんとかならないものか調べてみました。
原因
原因はownCloud側が206 Partial Contentでなく200 OKを返してしまうことです。シークをする場合は200 OKではなく206 Partial Contentが返ってくる必要があるためうまくシークできないようです。ですからownCloudが206 Partial Contentを返せるようになれば問題は解決です。
pecl_http
pecl_httpはphpの拡張モジュールです。これを使えばownCloudが206を返せるようになります。pecl_httpは現在2.xが最新版ですがどうやら2系統は上手く動かないようです。1.xを指定してインストールします。
以下のインストール手順はMacの場合です。とりあえずpecl_httpがインストールできれば問題ないので手順は他を調べてみてください。
Macの場合はまず
/etc
にあるphp.ini
に
extension=raphf.so
extension=propro.so
を書き加えてください。その後
sudo pecl install pecl_http-1.7.6
でpecl_httpをインストールします。途中いろいろ聞かれますが全てエンターで(多分)問題ありません。
インストールが問題なく進んだらphp.ini
に更に
extension=http.so
を書き加えてください。
以上でインストールは完了です。
sudo apachectl -k restart
でapacheを再起動しておきます。
ownCloudの設定
ownCloudのディレクトリ内にある設定ファイルを書き換えます。
/owncloud/lib/private/files.php
を開いてください。160行あたりに
if ($xsendfile) {
/*省略*/
} else {
\OC\Files\Filesystem::readfile($filename);
}
と書かれていると思います。この\OC\Files\Filesystem::readfile($filename);
を次のように書き換えます。
if ($xsendfile) {
/*省略*/
} else {
$filename = \OC\Files\Filesystem::getLocalFile($filename);
http_send_file($filename);
}
http_send_file
が206を返してくれる部分です。
これで確実にシークが出来るようになったかと思います。