hydra-works 0.16.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +59 -0
  3. data/.gitignore +3 -1
  4. data/.rubocop.yml +2 -6
  5. data/.rubocop_todo.yml +5 -0
  6. data/.solr_wrapper +1 -0
  7. data/CHANGELOG.md +621 -0
  8. data/CODE_OF_CONDUCT.md +36 -0
  9. data/CONTRIBUTING.md +23 -21
  10. data/Gemfile +11 -3
  11. data/LICENSE +14 -16
  12. data/README.md +54 -12
  13. data/SUPPORT.md +5 -0
  14. data/hydra-works.gemspec +15 -13
  15. data/lib/hydra/works/characterization.rb +5 -4
  16. data/lib/hydra/works/characterization/fits_document.rb +348 -144
  17. data/lib/hydra/works/characterization/schema/audio_schema.rb +2 -0
  18. data/lib/hydra/works/characterization/schema/video_schema.rb +2 -0
  19. data/lib/hydra/works/models/concerns/collection_behavior.rb +44 -0
  20. data/lib/hydra/works/models/concerns/file_set_behavior.rb +20 -0
  21. data/lib/hydra/works/models/concerns/work_behavior.rb +54 -0
  22. data/lib/hydra/works/services/add_external_file_to_file_set.rb +1 -1
  23. data/lib/hydra/works/services/add_file_to_file_set.rb +1 -1
  24. data/lib/hydra/works/services/characterization_service.rb +5 -0
  25. data/lib/hydra/works/services/determine_original_name.rb +1 -1
  26. data/lib/hydra/works/version.rb +1 -1
  27. data/lib/hydra/works/virus_scanner.rb +18 -2
  28. data/spec/fixtures/fits_0.8.5_tiff.xml +78 -0
  29. data/spec/fixtures/fits_1.2.0_avi.xml +83 -0
  30. data/spec/fixtures/fits_1.2.0_jpg.xml +76 -0
  31. data/spec/fixtures/fits_1.2.0_mp3.xml +51 -0
  32. data/spec/fixtures/fits_1.2.0_mp4.xml +88 -0
  33. data/spec/fixtures/fits_netcdf_two_mimetypes.xml +35 -0
  34. data/spec/hydra/works/characterization_spec.rb +12 -5
  35. data/spec/hydra/works/models/collection_spec.rb +162 -0
  36. data/spec/hydra/works/models/concerns/file_set/contained_files_spec.rb +3 -16
  37. data/spec/hydra/works/models/file_set_spec.rb +47 -0
  38. data/spec/hydra/works/models/work_spec.rb +213 -7
  39. data/spec/hydra/works/services/characterization_service_spec.rb +90 -27
  40. data/spec/hydra/works/services/persist_derivatives_spec.rb +6 -6
  41. data/spec/hydra/works/virus_scanner_spec.rb +31 -0
  42. data/use-cases/princeton_book_use_case.md +1 -1
  43. metadata +77 -67
  44. data/.travis.yml +0 -15
  45. data/lib/hydra/works/characterization/fits_mapper.rb +0 -0
  46. data/solr/config/_rest_managed.json +0 -3
  47. data/solr/config/admin-extra.html +0 -31
  48. data/solr/config/elevate.xml +0 -36
  49. data/solr/config/mapping-ISOLatin1Accent.txt +0 -246
  50. data/solr/config/protwords.txt +0 -21
  51. data/solr/config/schema.xml +0 -372
  52. data/solr/config/scripts.conf +0 -24
  53. data/solr/config/solrconfig.xml +0 -419
  54. data/solr/config/spellings.txt +0 -2
  55. data/solr/config/stopwords.txt +0 -58
  56. data/solr/config/stopwords_en.txt +0 -58
  57. data/solr/config/synonyms.txt +0 -31
  58. data/solr/config/xslt/example.xsl +0 -132
  59. data/solr/config/xslt/example_atom.xsl +0 -67
  60. data/solr/config/xslt/example_rss.xsl +0 -66
  61. data/solr/config/xslt/luke.xsl +0 -337
  62. data/spec/fixtures/eicar.txt +0 -1
@@ -4,6 +4,8 @@ module Hydra::Works::Characterization
4
4
  property :channels, predicate: RDF::Vocab::NFO.channels
5
5
  property :data_format, predicate: RDF::Vocab::EBUCore.hasDataFormat
6
6
  property :frame_rate, predicate: RDF::Vocab::NFO.frameRate
7
+ # bit_rate might be an array containing multiple values
8
+ property :bit_rate, predicate: RDF::Vocab::EBUCore.bitRate
7
9
  property :duration, predicate: RDF::Vocab::NFO.duration
8
10
  property :sample_rate, predicate: RDF::Vocab::EBUCore.sampleRate
9
11
  # properties without cannonical URIs
@@ -3,7 +3,9 @@ module Hydra::Works::Characterization
3
3
  property :height, predicate: RDF::Vocab::EBUCore.height
4
4
  property :width, predicate: RDF::Vocab::EBUCore.width
5
5
  property :frame_rate, predicate: RDF::Vocab::NFO.frameRate
6
+ property :bit_rate, predicate: RDF::Vocab::EBUCore.bitRate
6
7
  property :duration, predicate: RDF::Vocab::NFO.duration
7
8
  property :sample_rate, predicate: RDF::Vocab::EBUCore.sampleRate
9
+ property :aspect_ratio, predicate: RDF::Vocab::EBUCore.aspectRatio
8
10
  end
9
11
  end
@@ -28,6 +28,30 @@ module Hydra::Works
28
28
  type [Hydra::PCDM::Vocab::PCDMTerms.Collection, Vocab::WorksTerms.Collection]
29
29
  end
30
30
 
31
+ def parent_collections
32
+ in_collections + member_of_collections
33
+ end
34
+
35
+ def parent_collection_ids
36
+ in_collection_ids + member_of_collection_ids
37
+ end
38
+
39
+ def child_collections
40
+ collections + member_collections
41
+ end
42
+
43
+ def child_collection_ids
44
+ collection_ids + member_collection_ids
45
+ end
46
+
47
+ def child_works
48
+ works + member_works
49
+ end
50
+
51
+ def child_work_ids
52
+ work_ids + member_work_ids
53
+ end
54
+
31
55
  def ordered_works
32
56
  ordered_members.to_a.select(&:work?)
33
57
  end
@@ -44,6 +68,26 @@ module Hydra::Works
44
68
  works.map(&:id)
45
69
  end
46
70
 
71
+ def member_collections
72
+ return [] if id.nil?
73
+ member_objects = ActiveFedora::Base.where('member_of_collection_ids_ssim' => id)
74
+ member_objects.select(&:collection?).to_a
75
+ end
76
+
77
+ def member_collection_ids
78
+ member_collections.map(&:id)
79
+ end
80
+
81
+ def member_works
82
+ return [] if id.nil?
83
+ member_objects = ActiveFedora::Base.where('member_of_collection_ids_ssim' => id)
84
+ member_objects.select(&:work?).to_a
85
+ end
86
+
87
+ def member_work_ids
88
+ member_works.map(&:id)
89
+ end
90
+
47
91
  # @return [Boolean] whether this instance is a Hydra::Works Collection.
48
92
  def collection?
49
93
  true
@@ -43,10 +43,30 @@ module Hydra::Works
43
43
  true
44
44
  end
45
45
 
46
+ def parent_works
47
+ in_works + member_of_works
48
+ end
49
+
50
+ def parent_work_ids
51
+ in_work_ids + member_of_work_ids
52
+ end
53
+
46
54
  def in_works
47
55
  ordered_by.select { |parent| parent.class.included_modules.include?(Hydra::Works::WorkBehavior) }.to_a
48
56
  end
49
57
 
58
+ def in_work_ids
59
+ in_works.map(&:id)
60
+ end
61
+
62
+ def member_of_works
63
+ member_of.select(&:work?).to_a
64
+ end
65
+
66
+ def member_of_work_ids
67
+ member_of_works.map(&:id)
68
+ end
69
+
50
70
  private
51
71
 
52
72
  def remove_from_works
@@ -29,6 +29,38 @@ module Hydra::Works
29
29
  type [Hydra::PCDM::Vocab::PCDMTerms.Object, Vocab::WorksTerms.Work]
30
30
  end
31
31
 
32
+ def parent_collections
33
+ in_collections + member_of_collections
34
+ end
35
+
36
+ def parent_collection_ids
37
+ in_collection_ids + member_of_collection_ids
38
+ end
39
+
40
+ def parent_works
41
+ in_works + member_of_works
42
+ end
43
+
44
+ def parent_work_ids
45
+ in_work_ids + member_of_work_ids
46
+ end
47
+
48
+ def child_works
49
+ works + member_works
50
+ end
51
+
52
+ def child_work_ids
53
+ work_ids + member_work_ids
54
+ end
55
+
56
+ def child_file_sets
57
+ file_sets
58
+ end
59
+
60
+ def child_file_set_ids
61
+ file_set_ids
62
+ end
63
+
32
64
  def works
33
65
  members.select(&:work?)
34
66
  end
@@ -37,6 +69,16 @@ module Hydra::Works
37
69
  works.map(&:id)
38
70
  end
39
71
 
72
+ def member_works
73
+ return [] if id.nil?
74
+ member_objects = ActiveFedora::Base.where('object_ids_ssim' => id)
75
+ member_objects.select(&:work?).to_a
76
+ end
77
+
78
+ def member_work_ids
79
+ member_works.map(&:id)
80
+ end
81
+
40
82
  def ordered_works
41
83
  ordered_members.to_a.select(&:work?)
42
84
  end
@@ -82,6 +124,18 @@ module Hydra::Works
82
124
  ordered_by.select { |parent| parent.class.included_modules.include?(Hydra::Works::WorkBehavior) }.to_a
83
125
  end
84
126
 
127
+ def in_work_ids
128
+ in_works.map(&:id)
129
+ end
130
+
131
+ def member_of_works
132
+ in_objects.to_a.select(&:work?)
133
+ end
134
+
135
+ def member_of_work_ids
136
+ member_of_works.map(&:id)
137
+ end
138
+
85
139
  private
86
140
 
87
141
  # Remove this object from parent works or collections
@@ -15,7 +15,7 @@ module Hydra::Works
15
15
  versioning = opts.fetch(:versioning, true)
16
16
  filename = opts.fetch(:filename, external_file_url)
17
17
 
18
- # TODO: required as a workaround for https://github.com/projecthydra/active_fedora/pull/858
18
+ # TODO: required as a workaround for https://github.com/samvera/active_fedora/pull/858
19
19
  file_set.save unless file_set.persisted?
20
20
 
21
21
  updater_class = versioning ? VersioningUpdater : Updater
@@ -11,7 +11,7 @@ module Hydra::Works
11
11
  fail ArgumentError, 'supplied object must be a file set' unless file_set.file_set?
12
12
  fail ArgumentError, 'supplied file must respond to read' unless file.respond_to? :read
13
13
 
14
- # TODO: required as a workaround for https://github.com/projecthydra/active_fedora/pull/858
14
+ # TODO: required as a workaround for https://github.com/samvera/active_fedora/pull/858
15
15
  file_set.save unless file_set.persisted?
16
16
 
17
17
  updater_class = versioning ? VersioningUpdater : Updater
@@ -1,4 +1,5 @@
1
1
  require 'hydra-file_characterization'
2
+ require 'nokogiri'
2
3
 
3
4
  module Hydra::Works
4
5
  class CharacterizationService
@@ -62,6 +63,7 @@ module Hydra::Works
62
63
  def parse_metadata(metadata)
63
64
  omdoc = parser_class.new
64
65
  omdoc.ng_xml = Nokogiri::XML(metadata) if metadata.present?
66
+ omdoc.__cleanup__ if omdoc.respond_to? :__cleanup__
65
67
  characterization_terms(omdoc)
66
68
  end
67
69
 
@@ -101,7 +103,10 @@ module Hydra::Works
101
103
  end
102
104
 
103
105
  def append_property_value(property, value)
106
+ # We don't want multiple mime_types; this overwrites each time to accept last value
104
107
  value = object.send(property) + [value] unless property == :mime_type
108
+ # We don't want multiple heights / widths, pick the max
109
+ value = value.map(&:to_i).max.to_s if property == :height || property == :width
105
110
  object.send("#{property}=", value)
106
111
  end
107
112
  end
@@ -1,7 +1,7 @@
1
1
  module Hydra::Works
2
2
  class DetermineOriginalName
3
3
  # Determines the original name for a given file
4
- # @param [IO, File, Rack::Multipart::UploadedFile, #read] file
4
+ # @param [IO, File, Rack::Multipart::UploadedFile] file
5
5
  # @return [String]
6
6
  def self.call(file)
7
7
  return file.original_name if file.respond_to?(:original_name)
@@ -1,5 +1,5 @@
1
1
  module Hydra
2
2
  module Works
3
- VERSION = '0.16.0'.freeze
3
+ VERSION = '2.0.0'.freeze
4
4
  end
5
5
  end
@@ -30,16 +30,32 @@ module Hydra::Works
30
30
  # Override this method to use your own virus checking software
31
31
  # @return [Boolean]
32
32
  def infected?
33
- defined?(ClamAV) ? clam_av_scanner : null_scanner
33
+ if defined?(Clamby)
34
+ clamby_scanner
35
+ elsif defined?(ClamAV)
36
+ clam_av_scanner
37
+ else
38
+ null_scanner
39
+ end
34
40
  end
35
41
 
36
42
  def clam_av_scanner
43
+ Deprecation.warn(self, "The ClamAV has been replaced by Clamby " \
44
+ "as the supported virus scanner for hydra-works. " \
45
+ "ClamAV support will be removed in hydra-works 2.0 ")
37
46
  scan_result = ClamAV.instance.method(:scanfile).call(file)
38
47
  return false if scan_result == 0
39
48
  warning "A virus was found in #{file}: #{scan_result}"
40
49
  true
41
50
  end
42
51
 
52
+ # @return [Boolean]
53
+ def clamby_scanner
54
+ scan_result = Clamby.virus?(file)
55
+ warning("A virus was found in #{file}") if scan_result
56
+ scan_result
57
+ end
58
+
43
59
  # Always return zero if there's nothing available to check for viruses. This means that
44
60
  # we assume all files have no viruses because we can't conclusively say if they have or not.
45
61
  def null_scanner
@@ -50,7 +66,7 @@ module Hydra::Works
50
66
  private
51
67
 
52
68
  def warning(msg)
53
- ActiveFedora::Base.logger.warn(msg) if ActiveFedora::Base.logger
69
+ ActiveFedora::Base.logger&.warn(msg)
54
70
  end
55
71
  end
56
72
  end
@@ -0,0 +1,78 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <fits xmlns="http://hul.harvard.edu/ois/xml/ns/fits/fits_output" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hul.harvard.edu/ois/xml/ns/fits/fits_output http://hul
3
+ .harvard.edu/ois/xml/xsd/fits/fits_output.xsd" version="0.8.5" timestamp="6/20/17 11:20 AM">
4
+ <identification>
5
+ <identity format="Tagged Image File Format" mimetype="image/tiff" toolname="FITS" toolversion="0.8.5">
6
+ <tool toolname="Jhove" toolversion="1.5" />
7
+ <tool toolname="file utility" toolversion="5.14" />
8
+ <tool toolname="Exiftool" toolversion="9.13" />
9
+ <tool toolname="ffident" toolversion="0.2" />
10
+ <tool toolname="Tika" toolversion="1.3" />
11
+ <version toolname="Jhove" toolversion="1.5">6.0</version>
12
+ </identity>
13
+ </identification>
14
+ <fileinfo>
15
+ <size toolname="Jhove" toolversion="1.5">11082294</size>
16
+ <creatingApplicationName toolname="Jhove" toolversion="1.5">Capture One 8 Macintosh</creatingApplicationName>
17
+ <lastmodified toolname="Exiftool" toolversion="9.13" status="CONFLICT">2017:06:19 14:26:24-04:00</lastmodified>
18
+ <lastmodified toolname="Tika" toolversion="1.3" status="CONFLICT">2016-08-22T11:40:49</lastmodified>
19
+ <created toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">2016:08:22 11:40:49</created>
20
+ <filepath toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">/home/ubuntu/2012-002_928.tif</filepath>
21
+ <filename toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">2012-002_928.tif</filename>
22
+ <md5checksum toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">b8344bf2f88bd421986d9ac988578e28</md5checksum>
23
+ <fslastmodified toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">1497896784000</fslastmodified>
24
+ </fileinfo>
25
+ <filestatus>
26
+ <well-formed toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">true</well-formed>
27
+ <valid toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">true</valid>
28
+ </filestatus>
29
+ <metadata>
30
+ <image>
31
+ <byteOrder toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">little endian</byteOrder>
32
+ <byteOrder toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">little endian</byteOrder>
33
+ <compressionScheme toolname="Jhove" toolversion="1.5">Uncompressed</compressionScheme>
34
+ <imageWidth toolname="Tika" toolversion="1.3" status="CONFLICT">160</imageWidth>
35
+ <imageWidth toolname="Jhove" toolversion="1.5" status="CONFLICT">2226</imageWidth>
36
+ <imageHeight toolname="Jhove" toolversion="1.5" status="CONFLICT">1650</imageHeight>
37
+ <imageHeight toolname="Tika" toolversion="1.3" status="CONFLICT">119</imageHeight>
38
+ <colorSpace toolname="Jhove" toolversion="1.5">RGB</colorSpace>
39
+ <referenceBlackWhite toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">0.0 255.0 0.0 255.0 0.0 255.0 0.0 255.0 0.0 255.0 0.0 255.0</referenceBlackWhite>
40
+ <iccProfileName toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">Adobe RGB (1998)</iccProfileName>
41
+ <orientation toolname="Jhove" toolversion="1.5">normal*</orientation>
42
+ <samplingFrequencyUnit toolname="Jhove" toolversion="1.5">in.</samplingFrequencyUnit>
43
+ <xSamplingFrequency toolname="Jhove" toolversion="1.5">300</xSamplingFrequency>
44
+ <ySamplingFrequency toolname="Jhove" toolversion="1.5">300</ySamplingFrequency>
45
+ <bitsPerSample toolname="Jhove" toolversion="1.5">8 8 8</bitsPerSample>
46
+ <bitsPerSample toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">8 8 8</bitsPerSample>
47
+ <samplesPerPixel toolname="Jhove" toolversion="1.5" status="CONFLICT">3 3</samplesPerPixel>
48
+ <samplesPerPixel toolname="Exiftool" toolversion="9.13" status="CONFLICT">3</samplesPerPixel>
49
+ <scanningSoftwareName toolname="Jhove" toolversion="1.5">Capture One 8 Macintosh</scanningSoftwareName>
50
+ <digitalCameraModelName toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">IQ3 80MP</digitalCameraModelName>
51
+ <exposureTime toolname="Jhove" toolversion="1.5" status="CONFLICT">0.017</exposureTime>
52
+ <exposureTime toolname="Exiftool" toolversion="9.13" status="CONFLICT">1/60</exposureTime>
53
+ <isoSpeedRating toolname="Jhove" toolversion="1.5">50</isoSpeedRating>
54
+ <lightSource toolname="Jhove" toolversion="1.5" status="CONFLICT">other</lightSource>
55
+ <lightSource toolname="Exiftool" toolversion="9.13" status="CONFLICT">other light source</lightSource>
56
+ <iccProfileVersion toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">2.1.0</iccProfileVersion>
57
+ <captureDevice toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">digital still camera</captureDevice>
58
+ <digitalCameraManufacturer toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">Phase One</digitalCameraManufacturer>
59
+ <exposureProgram toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">Manual</exposureProgram>
60
+ <exifVersion toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">0220</exifVersion>
61
+ <shutterSpeedValue toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">1/60</shutterSpeedValue>
62
+ <sensingMethod toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">One-chip color area sensor</sensingMethod>
63
+ </image>
64
+ </metadata>
65
+ <statistics fitsExecutionTime="1523">
66
+ <tool toolname="OIS Audio Information" toolversion="0.1" status="did not run" />
67
+ <tool toolname="ADL Tool" toolversion="0.1" status="did not run" />
68
+ <tool toolname="Jhove" toolversion="1.5" executionTime="1220" />
69
+ <tool toolname="file utility" toolversion="5.14" executionTime="964" />
70
+ <tool toolname="Exiftool" toolversion="9.13" executionTime="1110" />
71
+ <tool toolname="NLNZ Metadata Extractor" toolversion="3.4GA" status="did not run" />
72
+ <tool toolname="OIS File Information" toolversion="0.2" executionTime="225" />
73
+ <tool toolname="OIS XML Metadata" toolversion="0.2" status="did not run" />
74
+ <tool toolname="ffident" toolversion="0.2" executionTime="695" />
75
+ <tool toolname="Tika" toolversion="1.3" executionTime="1371" />
76
+ </statistics>
77
+ </fits>
78
+
@@ -0,0 +1,83 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <fits xmlns="http://hul.harvard.edu/ois/xml/ns/fits/fits_output" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hul.harvard.edu/ois/xml/ns/fits/fits_output http://hul.harvard.edu/ois/xml/xsd/fits/fits_output.xsd" version="1.2.0" timestamp="4/4/18 4:12 PM">
3
+ <identification status="CONFLICT">
4
+ <identity format="AVI" mimetype="video/avi" toolname="FITS" toolversion="1.2.0">
5
+ <tool toolname="MediaInfo" toolversion="0.7.75" />
6
+ </identity>
7
+ <identity format="Audio/Video Interleaved Format" mimetype="video/x-msvideo" toolname="FITS" toolversion="1.2.0">
8
+ <tool toolname="Droid" toolversion="6.3" />
9
+ <tool toolname="file utility" toolversion="5.31" />
10
+ <tool toolname="ffident" toolversion="0.2" />
11
+ <externalIdentifier toolname="Droid" toolversion="6.3" type="puid">fmt/5</externalIdentifier>
12
+ </identity>
13
+ </identification>
14
+ <fileinfo>
15
+ <filepath toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">/Users/cjcolvar/Documents/Code/samvera/hydra-works/spec/fixtures/countdown.avi</filepath>
16
+ <filename toolname="MediaInfo" toolversion="0.7.75">countdown.avi</filename>
17
+ <size toolname="MediaInfo" toolversion="0.7.75">723678</size>
18
+ <md5checksum toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">d43ffafa098925dae10feeca46dc9a87</md5checksum>
19
+ <fslastmodified toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">1522855873000</fslastmodified>
20
+ </fileinfo>
21
+ <filestatus />
22
+ <metadata>
23
+ <video>
24
+ <location toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">/Users/cjcolvar/Documents/Code/samvera/hydra-works/spec/fixtures/countdown.avi</location>
25
+ <mimeType toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">video/avi</mimeType>
26
+ <format toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">AVI</format>
27
+ <duration toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">14148</duration>
28
+ <bitRate toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">409204</bitRate>
29
+ <dateModified toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">UTC 2018-04-04 15:31:13</dateModified>
30
+ <track type="video" id="0" toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">
31
+ <videoDataEncoding>CRAM</videoDataEncoding>
32
+ <codecId>CRAM</codecId>
33
+ <codecCC>CRAM</codecCC>
34
+ <codecName>CRAM</codecName>
35
+ <codecInfo>Microsoft Video 1</codecInfo>
36
+ <compression>Unknown</compression>
37
+ <byteOrder>Unknown</byteOrder>
38
+ <bitDepth>8 bits</bitDepth>
39
+ <bitRate>313826</bitRate>
40
+ <duration>14100</duration>
41
+ <delay>0</delay>
42
+ <trackSize>553118</trackSize>
43
+ <width>356 pixels</width>
44
+ <height>264 pixels</height>
45
+ <frameRate>10.000</frameRate>
46
+ <frameCount>141</frameCount>
47
+ <aspectRatio>4:3</aspectRatio>
48
+ </track>
49
+ <track type="audio" id="1" toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">
50
+ <audioDataEncoding>PCM</audioDataEncoding>
51
+ <codecId>1</codecId>
52
+ <codecFamily>PCM</codecFamily>
53
+ <compression>none</compression>
54
+ <bitRate>88200</bitRate>
55
+ <bitRateMode>Constant</bitRateMode>
56
+ <bitDepth>8 bits</bitDepth>
57
+ <duration>14148</duration>
58
+ <delay>0</delay>
59
+ <trackSize>155980</trackSize>
60
+ <samplingRate>11025</samplingRate>
61
+ <numSamples>155982</numSamples>
62
+ <channels>1</channels>
63
+ <byteOrder>Little</byteOrder>
64
+ </track>
65
+ </video>
66
+ </metadata>
67
+ <statistics fitsExecutionTime="692">
68
+ <tool toolname="MediaInfo" toolversion="0.7.75" executionTime="662" />
69
+ <tool toolname="OIS Audio Information" toolversion="0.1" status="did not run" />
70
+ <tool toolname="ADL Tool" toolversion="0.1" status="did not run" />
71
+ <tool toolname="VTT Tool" toolversion="0.1" status="did not run" />
72
+ <tool toolname="Droid" toolversion="6.3" executionTime="273" />
73
+ <tool toolname="Jhove" toolversion="1.16" status="did not run" />
74
+ <tool toolname="file utility" toolversion="5.31" executionTime="644" />
75
+ <tool toolname="Exiftool" toolversion="10.00" status="did not run" />
76
+ <tool toolname="NLNZ Metadata Extractor" toolversion="3.6GA" status="did not run" />
77
+ <tool toolname="OIS File Information" toolversion="0.2" executionTime="80" />
78
+ <tool toolname="OIS XML Metadata" toolversion="0.2" status="did not run" />
79
+ <tool toolname="ffident" toolversion="0.2" executionTime="555" />
80
+ <tool toolname="Tika" toolversion="1.10" status="did not run" />
81
+ </statistics>
82
+ </fits>
83
+