LoginSignup
2
2

More than 5 years have passed since last update.

ownCloudで206 Partial Contentを返すようにする

Posted at

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を返してくれる部分です。

これで確実にシークが出来るようになったかと思います。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2