blob: 1e3ae4fb476865953c3346b7d0f4acd3fe86436e (
plain)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
<?php
/**
* getID3 Metadata handler
*/
class ID3Handler extends TimedMediaHandler {
// XXX match GETID3_VERSION ( too bad version is not a getter )
const METADATA_VERSION = 2;
/**
* @param $path string
* @return array
*/
protected function getID3( $path ) {
// Create new id3 object:
$getID3 = new getID3();
// Don't grab stuff we don't use:
$getID3->option_tag_id3v1 = false; // Read and process ID3v1 tags
$getID3->option_tag_id3v2 = false; // Read and process ID3v2 tags
$getID3->option_tag_lyrics3 = false; // Read and process Lyrics3 tags
$getID3->option_tag_apetag = false; // Read and process APE tags
$getID3->option_tags_process = false; // Copy tags to root key 'tags' and encode to $this->encoding
$getID3->option_tags_html = false; // Copy tags to root key 'tags_html' properly translated from various encodings to HTML entities
// Analyze file to get metadata structure:
$id3 = $getID3->analyze( $path );
// remove file paths
unset( $id3['filename'] );
unset( $id3['filepath'] );
unset( $id3['filenamepath']);
// Update the version
$id3['version'] = self::METADATA_VERSION;
return $id3;
}
/**
* @param $file File
* @param $path string
* @return string
*/
function getMetadata( $file, $path ) {
$id3 = $this->getID3( $path );
return serialize( $id3 );
}
/**
* @param $metadata
* @return bool|mixed
*/
function unpackMetadata( $metadata ) {
wfSuppressWarnings();
$unser = unserialize( $metadata );
wfRestoreWarnings();
if ( isset( $unser['version'] ) && $unser['version'] == self::METADATA_VERSION ) {
return $unser;
} else {
return false;
}
}
/**
* @param $file File
* @return mixed
*/
function getBitrate( $file ){
$metadata = $this->unpackMetadata( $file->getMetadata() );
if ( !$metadata || isset( $metadata['error'] ) || !isset( $metadata['bitrate'] ) ) {
return 0;
} else {
return $metadata['bitrate'];
}
}
/**
* @param $file File
* @return int
*/
function getLength( $file ) {
$metadata = $this->unpackMetadata( $file->getMetadata() );
if ( !$metadata || isset( $metadata['error'] ) || !isset( $metadata['playtime_seconds'] ) ) {
return 0;
} else {
return $metadata['playtime_seconds'];
}
}
/**
* @param $file File
* @return bool|int
*/
function getFramerate( $file ){
$metadata = $this->unpackMetadata( $file->getMetadata() );
if ( !$metadata || isset( $metadata['error'] ) ) {
return 0;
} else {
// return the frame rate of the first found video stream:
if( isset( $metadata['video'] )
&& isset( $metadata['video']['frame_rate'] ) ) {
return $metadata['video']['frame_rate'];
}
return false;
}
}
}
|