2015年5月5日に新しく発表された動画サポートを試してみた。
アップロード
インストールなどは前回の記事参照。
同一ディレクトリにある、movファイルをアップロードした。
動画は、iPhoneで撮影したもの。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <?php
require '../vendor/autoload.php';
use Cloudinary;
use Cloudinary\Uploader;
$account = parse_url(getenv('CLOUDINARY_URL'));
\Cloudinary::config(array(
"cloud_name" => $account['host'],
"api_key" => $account['user'],
"api_secret" => $account['pass']
));
$ret = \Cloudinary\Uploader::upload("iphone_movie.mov",array(
"resource_type" => "video"
));
print_r($ret);
|
結果は以下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| Array (
[public_id] => wfdpqg39qjoc6lnkr3cs
[version] => 1430967110
[signature] => 7f52af2c53ccc3b38f8b33300a40d6085c85c032
[width] => 1280
[height] => 720
[format] => mov
[resource_type] => video
[created_at] => 2015-05-07T02:51:50Z
[tags] => Array ( )
[bytes] => 5572519
[type] => upload
[etag] => 3114c6de99a74817eef082b330754d1e
[url] => http://res.cloudinary.com/harslxcej/video/upload/v1430967110/wfdpqg39qjoc6lnkr3cs.mov
[secure_url] => https://res.cloudinary.com/harslxcej/video/upload/v1430967110/wfdpqg39qjoc6lnkr3cs.mov
[audio] => Array (
[codec] => aac
[bit_rate] => 63431
[frequency] => 44100
[channels] => 1
[channel_layout] => mono
)
[video] => Array (
[pix_format] => yuv420p
[codec] => h264
[level] => 31
[bit_rate] => 4604806
)
[frame_rate] => 29.97002997003
[bit_rate] => 4686070
[duration] => 9.538333
[rotation] => 0
)
|
表示
PHPでは、cl_video_tag
を利用することでvideo
タグを出力してくれる。
cl_video_tag($public_id, array( "alt" => "Sample Video" ));
出力
1
2
3
4
5
| <video alt='Sample Video' poster='https://res.cloudinary.com/harslxcej/video/upload/wfdpqg39qjoc6lnkr3cs.jpg'>
<source src='https://res.cloudinary.com/harslxcej/video/upload/wfdpqg39qjoc6lnkr3cs.webm' type='video/webm'>
<source src='https://res.cloudinary.com/harslxcej/video/upload/wfdpqg39qjoc6lnkr3cs.mp4' type='video/mp4'>
<source src='https://res.cloudinary.com/harslxcej/video/upload/wfdpqg39qjoc6lnkr3cs.ogv' type='video/ogg'>
</video>
|
このままだとコントローラーが表示されていないので、その辺のオプションも追加する。
1
2
3
4
5
6
7
| cl_video_tag($public_id, array(
"width" => 600,
"height" => 400,
"crop" => "fill",
"preload" => "none",
"controls" => true,
));
|
出力
1
2
3
4
5
| <video controls='1' height='400' poster='https://res.cloudinary.com/harslxcej/video/upload/c_fill,h_400,w_600/wfdpqg39qjoc6lnkr3cs.jpg' preload='none' width='600'>
<source src='https://res.cloudinary.com/harslxcej/video/upload/c_fill,h_400,w_600/wfdpqg39qjoc6lnkr3cs.webm' type='video/webm'>
<source src='https://res.cloudinary.com/harslxcej/video/upload/c_fill,h_400,w_600/wfdpqg39qjoc6lnkr3cs.mp4' type='video/mp4'>
<source src='https://res.cloudinary.com/harslxcej/video/upload/c_fill,h_400,w_600/wfdpqg39qjoc6lnkr3cs.ogv' type='video/ogg'>
</video>
|
サムネイルの出力は以下。
public idに拡張子をつけてやらないと表示が出来なかった。
(jpg, png, webp, wdpに対応しているよう)
1
2
3
4
5
6
| cl_image_tag($public_id.".jpg", array(
"width"=>300,
"height"=>300,
"crop"=>"fill",
"resource_type"=>"video"
));
|
結果
<img src='https://res.cloudinary.com/harslxcej/video/upload/c_fill,h_300,w_300/wfdpqg39qjoc6lnkr3cs.jpg' height='300' width='300'/>
フォームからアップロード
前回、Transloaditでアップロードした時と同じように、フォームから選択した動画をアップロードしてみる。
情報が取得できない
動画をフォームからアップロードしてみると情報が取得できない、と思ったが、
どうやらサーバーの設定での最大アップロードサイズを超過していたよう。
アップロードサイズはデフォルトでは、2MB
。
これの変更方法は以前に書いていた。
[PHP][heroku]upload_max_filesizeを変更する – KayaMemo
コード
以下、全コード。
動画をアップロードされたら表示するところまで。
(エラーチェックなどは全くしていないので注意)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| <?php
require '../vendor/autoload.php';
use Cloudinary;
use Cloudinary\Uploader;
$showFlg = false;
if(isset($_FILES['userfile'])){
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $_FILES['userfile']['name'])) {
$uploadFile = $_FILES['userfile']['name'];
$account = parse_url(getenv('CLOUDINARY_URL'));
\Cloudinary::config(array(
"cloud_name" => $account['host'],
"api_key" => $account['user'],
"api_secret" => $account['pass']
));
$ret = \Cloudinary\Uploader::upload($uploadFile,array(
"resource_type" => "video"
));
$public_id = $ret['public_id'];
$showFlg = true;
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<title>ファイルアップロードテスト</title>
<meta charset="utf-8">
</head>
<body>
<?php if(!$showFlg){ ?>
<form enctype="multipart/form-data" method="post" action="upload-form-movie.php">
<input type="hidden" name="MAX_FILE_SIZE" value="20000000" />
<input name="userfile" type="file">
<input type="submit" value="Upload">
</form>
<?php }else{
echo $resize = cl_video_tag($public_id, array(
"width" => 600,
"height" => 400,
"crop" => "fill",
"preload" => "none",
"controls" => true,
));
} ?>
</body>
</html>
|
参考
Introducing cloud based service for video management | Cloudinary Blog
Video manipulation and delivery | Cloudinary
PHP: POST メソッドによるアップロード – Manual
サーバーのアップロードファイルの最大容量の確認と容量制限の変更|PHP工房
Customizing Web Server and Runtime Settings for PHP | Heroku Dev Center