S3MediaServerApi - - a Ruby client for the S3 Media Server
S3MediaServerApi helps you write apps that need to interact with S3 Media Server.
Installation
Add this line to your application's Gemfile:
gem 's3_media_server_api'
And then execute:
$ bundle
Or install it yourself as:
$ gem install s3_media_server_api
Usage
Available resources
S3MediaServerApi::Media::Document
Use S3MediaServerApi::Media::Document to interact with Document resource
# to create document from existing aws file uuid, use create method
document = S3MediaServerApi::Media::Document.create("4edbfdf9-9517-4902-8e92-2212215b0de5")
# if you want create document from file path, use create method
created_document = S3MediaServerApi::Media::Document.create_from_path('/Users/ayrat/Development/s3_media_server_api/tmp/sample_mpeg4.mp4')
# to resolve document, use resolve method
resolved_document = S3MediaServerApi::Media::Document.resolve(created_document.uuid)
# both methods create and resolve return document object
resolved_document.uuid # uuid of document
resolved_document.url # url of document
resolved_document.size # size of document
resolved_document.name # url of document
# use destroy method, to destroy document
# this method is asynchronous, so it doesn't return anything
S3MediaServerApi::Media::Document.destroy(created_document.uuid)
S3MediaServerApi::Media::Image
Use S3MediaServerApi::Media::Image to interact with Image resource
# to create image from existing aws file uuid, use create method
image = S3MediaServerApi::Media::Image.create("4edbfdf9-9517-4902-8e92-2212215b0de5")
# if you want create image from file path, use create method
created_image = S3MediaServerApi::Media::Image.create_from_path('/Users/ayrat/Development/s3_media_server_api/tmp/test_image.jpg')
# to resolve image, use resolve method
resolved_image = S3MediaServerApi::Media::Image.resolve(created_image.uuid)
# both methods create and resolve return document object
resolved_image.size
resolved_image.name
resolved_image.uuid
resolved_image.source.url
resolved_image.source.width
resolved_image.source.height
# to create thumb of image, use resize method.
# this method is asynchronous
S3MediaServerApi::Media::Image.resize(created_image.uuid)
# after thumb is created, new attributes will be available
thumbed_image = S3MediaServerApi::Media::Image.resolve(created_image.uuid)
thumbed_image.thumb.url
thumbed_image.thumb.width
thumbed_image.thumb.height
# to copy image, use copy method
copied_image = S3MediaServerApi::Media::Image.copy(created_image.uuid)
# to destroy image, use destroy method
# this method is asynchronous
S3MediaServerApi::Media::Image.destroy(created_image.uuid)
S3MediaServerApi::Media::Audio
Use S3MediaServerApi::Media::Audio to interact with Audio resource
# to create audio from existing aws file uuid, use create method
audio = S3MediaServerApi::Media::Audio.create("4edbfdf9-9517-4902-8e92-2212215b0de5")
# to create audio file from its path, use create method
created_audio = S3MediaServerApi::Media::Audio.create_from_path('/Users/ayrat/Development/s3_media_server_api/tmp/music_test.mp3')
# to resolve image, use resolve method
resolved_audio = S3MediaServerApi::Media::Audio.resolve(created_audio.uuid)
# both methods create and resolve return audio object
resolved_audio.url
resolved_audio.uuid
resolved_audio.name
resolved_audio.size
# cut method sends request to create audio sampel
# parameters: uuid - uuid of file
# audio_url - url of audio file
# duration - duration of cutted file
# start_position - position where cut wil be made
# this method is asynchronous
cut_params = { duration: 20,
start_position: 40}
S3MediaServerApi::Media::Audio.cut(created_audio.uuid, cut_params)
# after audio is cutted, new attributes will be available
cutted_audio = S3MediaServerApi::Media::Audio.resolve(created_audio.uuid)
cutted_audio.sample_url
cutted_audio.duration
cutted_audio.sample_duration
# destroys audio file
# this method is asynchronous
S3MediaServerApi::Media::Audio.destroy(created_audio.uuid)
S3MediaServerApi::Media::Video
Use S3MediaServerApi::Media::Video to interact with Video resource
# to create video from existing aws file uuid, use create method
video = S3MediaServerApi::Media::Video.create("4edbfdf9-9517-4902-8e92-2212215b0de5")
# to create video from its path, use create method
video = S3MediaServerApi::Media::Video.create_from_path('/Users/ayrat/Development/s3_media_server_api/tmp/sample_mpeg4.mp4')
# to resolve video, use resolve method
video = S3MediaServerApi::Media::Video.resolve(video.uuid)
# both methods create and resolve return video object
video.
video.name
video.
video.transcoded # true if video has all versions
# false otherwise
# after screenshots are made, screenshots attributes will be available with 3 screenshots
video = S3MediaServerApi::Media::Video.resolve(video.uuid)
video.screenshots[0].source.url
video.screenshots[0].source.width
video.screenshots[0].source.height
video.screenshots[0].thumb.url
video.screenshots[0].thumb.width
video.screenshots[0].thumb.height
# you can get available video versions in version attribute
video.versions[0].format
video.versions[0].resolution
video.versions[0].url
video.versions[0].size
# to destroy video, use destroy method
# this method is asynchronous
S3MediaServerApi::Media::Video.destroy(video.uuid)
S3MediaServerApi::Media::Collection
Use S3MediaServerApi::Media::Collection to interact with Collection resource
# to create Collection, use create method
# provide uuid of collection owner
owner_uuid = "4edbfdf9-9517-4902-8e92-2212215b0de5"
collection = S3MediaServerApi::Media::Collection.create(owner_uuid)
# to add new element to the collection, use add_item method
# firstly create aws_file then provide its uuid and kind of media you want to create
# method returns media file object that was created
# available media types
# images, documents, videos, audios
params = { kind: 'images', media_file_uuid: aws_file.uuid }
image = S3MediaServerApi::Media::Collection.add_item(collection.uuid, params)
# to resolve document, use resolve method
resolved_collection = S3MediaServerApi::Media::Collection.resolve(created_collection.uuid)
# both methods create and resolve return collection object
resolved_collection.uuid # uuid of the collection
resolved_collection.owner_uuid # uuid of the collection owner
resolved_collection.videos # array of videos
resolved_collection.documents # array of documents
resolved_collection.images # array of images
resolved_collection.audios # array of audio files
# NOTE: video, document, image and audio objects are described above
# use destroy method, to destroy collection
# this method is asynchronous, so it doesn't return anything
S3MediaServerApi::Media::Colllection.destroy(created_collection.uuid)
AwsFile
# to create aws file from its path, use upload method from S3MediaServerApi::Uploader module
aws_file = S3MediaServerApi::Uploader.upload('/Users/ayrat/Development/s3_media_server_api/tmp/test_image.jpg')
# to create aws file from its url, use upload_from_url method from S3MediaServerApi::Uploader module
image_url = "https://d2l3jyjp24noqc.cloudfront.net/uploads/image/img/269/Test-Driven_APIs_with_Phoenix_and_Elixir.png"
file = S3MediaServerApi::Uploader.upload_from_url(image_url)
# to resolve aws file, use resolve method
resolved_aws_file = S3MediaServerApi::AwsFile.resolve(aws_file.uuid)
# both S3MediaServerApi::Uploader.upload and S3MediaServerApi::AwsFile.resolve return aws file object
aws_file.uuid
aws_file.size
aws_file.mime_type
aws_file.uploads_count
aws_file.default_part_size
aws_file.state
aws_file.public_url
aws_file.name
NOTE: you can't remove aws file without creating media resource
Configuration
You can configure the following values by overriding these values using S3MediaServerApi::Config.configure method.
# in how many threads file will be uploaded
# by default upload_thread_count value is 4
upload_thread_count
# class that will cache queries to S3 Media Server
cache_class
# to mock all request set mock to true
mock
Example
S3MediaServerApi::Config.configure do |config|
config.upload_thread_count = 10
config.mock = true
end
Configuring cache class
Define class with class method fetch
class Infrastructure::S3MediaServerCacheService
class << self
def fetch(key, params={}, &block)
Rails.cache.fetch(key, expires_in: 24.hours) do
yield
end
end
end
end
Then override cache_class in S3MediaServerApi::Config.configure
S3MediaServerApi::Config.configure do |config|
config.cache_class = Infrastructure::S3MediaServerCacheService
end
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake test
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/s3_media_server_api.
License
The gem is available as open source under the terms of the MIT License.