class AzureMediaService::Asset
Constants
- Options
Public Class Methods
create(name, options=0)
click to toggle source
# File lib/azure_media_service/model/asset.rb, line 13 def create(name, options=0) post_body = { "Name" => name, "Options" => options } create_response(service.post("Assets", post_body)) end
get(asset_id=nil)
click to toggle source
# File lib/azure_media_service/model/asset.rb, line 21 def get(asset_id=nil) service.get('Assets', Asset, asset_id) end
Public Instance Methods
content_key_link(content_key)
click to toggle source
# File lib/azure_media_service/model/asset.rb, line 211 def content_key_link(content_key) @request.post("Assets('#{CGI.escape(self.Id)}')/$links/ContentKeys", {uri: content_key.__metadata['uri']}) end
content_keys()
click to toggle source
# File lib/azure_media_service/model/asset.rb, line 52 def content_keys @content_keys ||= [] if @content_keys.empty? _uri = URI.parse(self.ContentKeys["__deferred"]["uri"]) url = _uri.path.gsub('/api/','') res = @request.get(url) res["d"]["results"].each do |v| @content_keys << ContentKey.new(v) end end @content_keys end
delete()
click to toggle source
# File lib/azure_media_service/model/asset.rb, line 201 def delete begin res = @request.delete("Assets('#{self.Id}')") clear_cache rescue => e raise MediaServiceError.new(e.message) end res end
delivery_policies()
click to toggle source
# File lib/azure_media_service/model/asset.rb, line 65 def delivery_policies @delivery_policies ||= [] if @delivery_policies.empty? _uri = URI.parse(self.DeliveryPolicies["__deferred"]["uri"]) url = _uri.path.gsub('/api/','') res = @request.get(url) res["d"]["results"].each do |v| @delivery_policies << AssetDeliveryPolicy.new(v) end end @delivery_policies end
delivery_policy_link(asset_delivery_policy)
click to toggle source
# File lib/azure_media_service/model/asset.rb, line 215 def delivery_policy_link(asset_delivery_policy) @request.post("Assets('#{CGI.escape(self.Id)}')/$links/DeliveryPolicies", {uri: asset_delivery_policy.__metadata['uri']}) end
encode_job(encode_configuration)
click to toggle source
# File lib/azure_media_service/model/asset.rb, line 142 def encode_job(encode_configuration) media_processor = @service.media_processor_id_by_name('Media Encoder Standard') conf_str = encode_configuration.gsub(' ', '_') if AzureMediaService.encode_tasks.has_key?(encode_configuration) encode_configuration = AzureMediaService.encode_tasks[encode_configuration] end job_name, output_name = job_and_output_name(asset_name:self.Name, conf:conf_str) post_body = {} post_body["Name"] = job_name post_body["InputMediaAssets"] = [ { "__metadata" => { "uri" => self.__metadata["uri"] } } ] task_body = '' xml = Builder::XmlMarkup.new(:target => task_body) xml.instruct! xml.taskBody { xml.inputAsset 'JobInputAsset(0)' xml.outputAsset 'JobOutputAsset(0)', :assetName => output_name } post_body["Tasks"] = [ { "Configuration" => encode_configuration, "MediaProcessorId" => media_processor.Id, "TaskBody" => task_body } ] res = @request.post('Jobs', post_body) Job.new(res["d"]) end
files()
click to toggle source
# File lib/azure_media_service/model/asset.rb, line 39 def files @files ||= [] if @files.empty? _uri = URI.parse(self.Files["__deferred"]["uri"]) url = _uri.path.gsub('/api/','') res = @request.get(url) res["d"]["results"].each do |v| @files << AssetFile.new(v) end end @files end
locators()
click to toggle source
# File lib/azure_media_service/model/asset.rb, line 26 def locators @locators ||= [] if @locators.empty? _uri = URI.parse(self.Locators["__deferred"]["uri"]) url = _uri.path.gsub('/api/','') res = @request.get(url) res["d"]["results"].each do |v| @locators << Locator.new(v) end end @locators end
publish(expire_minutes: 43200)
click to toggle source
# File lib/azure_media_service/model/asset.rb, line 182 def publish(expire_minutes: 43200) locator = locators.select {|l| l.Type == 2}.first unless locator policy = AccessPolicy.create(name:"PublishPolicy", duration_minutes: expire_minutes, permission:1) locator = Locator.create(policy_id: policy.Id, asset_id: self.Id, type: 2) end locator end
publish_url()
click to toggle source
# File lib/azure_media_service/model/asset.rb, line 191 def publish_url primary_file = files.select {|f| f.IsPrimary == true}.first locator = locators.select {|l| l.Type == 2 }.first if primary_file && locator File.join(locator.Path, primary_file.Name, 'Manifest') else nil end end
upload(filepath)
click to toggle source
# File lib/azure_media_service/model/asset.rb, line 78 def upload(filepath) begin mime_type = MIME::Types.type_for(filepath)[0].to_s basename = File.basename(filepath, '.*') filename = File.basename(filepath) f = Faraday::UploadIO.new(filepath, mime_type) # create policy policy = AccessPolicy.create(name:"UploadPolicy", duration_minutes:1800, permission:2) # create Locator locator = Locator.create(policy_id:policy.Id, asset_id:self.Id, type:1) # upload upload_url = File.join(locator.BaseUri, filename) upload_url += locator.ContentAccessComponent if f.size > Config::UPLOAD_LIMIT_SIZE # put block and put block list API i = 1 blockids = [] while buf = f.read(Config::READ_BUFFER_SIZE) do id = "%05d" % i # サイズを同じにしなければいけないので、5桁にする blockid = Base64.strict_encode64("#{id}-#{filename}") blockids << blockid put_block_url = upload_url + "&comp=block&blockid=#{URI.escape(blockid)}" res = put_blob(url:put_block_url, blob:buf) i+=1 end put_block_list_url = upload_url + "&comp=blocklist" let = '' xml = Builder::XmlMarkup.new(:target => let, :indent => 3) xml.instruct! xml.BlockList { blockids.each do |id| xml.Latest id end } res = @request.put_row(put_block_list_url, let) do |headers| headers['x-ms-date'] = Time.now.httpdate headers['x-ms-version'] = '2014-02-14' headers['Content-Type'] = 'text/plain; charset = UTF-8' headers['Content-Length'] = let.size.to_s end else res = put_blob(url:upload_url, blob:f) end # create metadata @request.get("CreateFileInfos", {"assetid" => "'#{URI.encode(self.Id)}'"}) clear_cache policy.delete locator.delete rescue => e raise MediaServiceError.new(e.message) end self end
Private Instance Methods
clear_cache()
click to toggle source
# File lib/azure_media_service/model/asset.rb, line 221 def clear_cache @locators = nil @files = nil @content_keys = nil @delivery_policies = nil self end
job_and_output_name(asset_name:, conf:)
click to toggle source
# File lib/azure_media_service/model/asset.rb, line 229 def job_and_output_name(asset_name:, conf:) job_names = [] job_names << asset_name job_names << 'EncodeJob' job_names << conf job_name = job_names.join('-') output_names = [] output_names << asset_name output_names << conf output_names << 'Output' output_name = output_names.join('-') [job_name, output_name] end
put_blob(url:, blob:)
click to toggle source
# File lib/azure_media_service/model/asset.rb, line 245 def put_blob(url:, blob:) res = @request.put_row(url, blob) do |headers| headers['x-ms-blob-type'] = 'BlockBlob' headers['x-ms-version'] = '2014-02-14' # Storage API Version headers['Content-Type'] = 'application/octet-stream' headers['Content-Length'] = blob.size.to_s end end