質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

2回答

7771閲覧

PHPでmp4を出力して再生したい

smnsmn

総合スコア175

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2016/06/23 17:08

CakePHP2系です。

こちらなどを参考に、
ファイルに直接アクセスするのではなくphpにアクセスすることで、
phpファイルからmp4を出力し、再生したいと思いやってみているのですが、上手く行きません。

CakePHPを使っているので、該当のControllerのactionにアクセス時に返す、といったようにしています。

PHP

1//hogeController 2 public function video() { 3 $this->layout = false; 4 $this->autoRender = false; 5 6 //ファイルパス 7 $file = '/home/hoge/cakephp/app/webroot/test/video.mp4'; 8 9 $etag = md5($_SERVER["REQUEST_URI"]).filesize($file); 10 11 header('Content-Type: video/mp4'); 12 header('Content-Length: '.filesize($file)); 13 header("Accept-Ranges: bytes"); 14 header("Etag: \"{$etag}\""); 15 header('X-Mod-H264-Streaming: version=2.2.7'); 16 17 echo readfile($file); 18 exit; 19 } 20

実際に返って来ているヘッダは下記です。

Date Thu, 23 Jun 2016 16:58:03 GMT
Server サーバーの種類
X-Powered-By secret
Etag "etagの値"
X-Mod-H264-Streaming version=2.2.7
Content-Type video/mp4
Connection close
Accept-Ranges bytes
Content-Length 143744705

ファイルに直接アクセスすると当然ちゃんと再生されます。

Date Thu, 23 Jun 2016 17:00:45 GMT
Last-Modified Thu, 23 Jun 2016 15:19:45 GMT
Server サーバーの種類
ETag "etagの値"
X-Mod-H264-Streaming version=2.2.7
Content-Type video/mp4
Connection close
Accept-Ranges bytes
Content-Length 143744737

なぜうまくいかないのでしょうか?
再生の画面は表示される(再生マークが出、
ソースはhtmlのvideoタグのsrcに、http://hoge/hoge/video という指定したURLが入っています)

何卒、ご教授お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

php

1//echo readfile($file); 2@readfile($file);

投稿2016/06/24 00:13

kodai

総合スコア759

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Accept-Rangesを出力してHTTP_RANGE(部分リクエスト)に対応していることをプレイヤーに伝えていますが、実際の機能では対応していないのが原因ではないでしょうか。

投稿2016/06/23 18:57

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/24 00:54

HTTP_RANGE PHPで検索すると 解決策のあるページが出てきますよ。
smnsmn

2016/06/24 04:13 編集

hide2e3r様 先日の https://teratail.com/questions/38839 こちらの質問をさせて頂いた際はありがとうございました。 http://cakephp.popotoo.com/other/534/ 上記の記事を参考に書いたところ、無事再生することができました(bow) やはり、HTTTP_RANGEのリクエスト部分が問題だったのかな・・・?と思います。 また、JWプレイヤーの説明を見る限り、 ファイルに指定するのはURLではなく、.mp4などの拡張子で終わるものでなければいけないようで、 そのままのURLを指定しただけでは再生できなかったのですが、 ルーティングでURLをhttp://hoge.com/hoge/video.mp4 のようにしてみたところ、無事に再生ができました。 かなり読み込みが遅く、使えるかどうかはもう少し探って見なければならないようですが・・・ 助言くださり、本当にありがとうございました。
退会済みユーザー

退会済みユーザー

2016/06/24 04:32

> .mp4などの拡張子で終わるものでなければいけない なるほど、これはちょっと盲点でした。 > かなり読み込みが遅く phpを介さずに直接flvを読み込んだ場合と比較してみると良さそうですね
smnsmn

2016/06/24 08:48

ありがとうございます。 ちゃんと設定したところ、再生時間も問題ありませんでした。m(__)m ただ、動画を読み込んだところまでしかシーク出来ず、 それ以上のところまでシークさせると、最初に戻ってしまい、シーク出来なくなってしまいました。 再生したい位置のSEEK_CUR?スタート位置を取得してreadfileに入れるのか、 headerに指定できればいいのか・・・?と思いますが、良い策はうかんでおりません。 課題はありますが、一歩進めたので頑張ります。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問