mediaserver

package module
v0.11.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 9, 2024 License: Apache-2.0 Imports: 12 Imported by: 4

README

Media Server 🌇

GoDoc Version Build Status Go Report Card Codecov

Media Server is a media manipulation library that works inside of your existing applications. It manages uploads and downloads, and lets you translate files into different encodings on the fly. It works primarily with images and audio files, with video manipulations currently under development.


ms := mediaserver.New(originalFilesystem, cacheFilesystem)

if err := ms.Put("myfile", filedata); err != nil {
  // handle error
}

filespec := mediaserver.Filespec{
  Filename: "myfile"
  MimeType: "image/webp"
  Height: 600,
  Width: 600,
}

if err := ms.Get(filespec, result); err != nil {
  // handle error
}

// return result to client...

Image Resizing

Media Server can resize and transcode images. Just request an image with a FileSpec that matches your needs and the corresponding file will be generated (or retrieved from the cache) and returned to your calling application.

// This filespec resizes an image to 1200px (maintaining aspect ratio)
filespec := mediaserver.Filespec{
  Width:1200,
}

Media Transcoding

Media Server can automatically translate files between these formats:

// This filespec converts an audio file into an MP3
filespec := mediaserver.Filespec{
  MimeType:"audio/mp3"
}

Image Types: GIF, JPG, PNG, WEBP

Audio Types: FLAC, AAC, MP3

Video Types: Coming soon

FFmpeg Dependency

This library now depends on FFmpeg for all media manipulations. This eliminated a problematic dependency on CGo, and has expanded the kinds of media files that mediaserver can manipulate.

Media Server maintains two resource directories: one that contains original uploads and a cache of modified or transcoded files.

Afero Filesystems

Media server uses Afero to connect to both of the file directories (one for originals, and one for cached results). Afero is a filesystem abstraction with connectors for many different kinds of directory services, including:

Pull Requests Welcome

This library is a work in progress, and will benefit from your experience reports, use cases, and contributions. If you have an idea for making Rosetta better, send in a pull request. We're all in this together! 🌇

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type FileSpec

type FileSpec struct {
	Filename  string
	Extension string
	Width     int
	Height    int
	MimeType  string
}

FileSpec represents all the parameters available for requesting a file. This can be generated directly from a URL.

func NewFileSpec

func NewFileSpec(file *url.URL, defaultType string) FileSpec

NewFileSpec reads a URL and returns a fully populated FileSpec

func (*FileSpec) AspectRatio added in v0.11.0

func (ms *FileSpec) AspectRatio() float64

func (*FileSpec) CacheDir

func (ms *FileSpec) CacheDir() string

CacheDir returns the name of the directory within the cache where versions of this file will be stored.

func (*FileSpec) CacheFilename

func (ms *FileSpec) CacheFilename() string

CacheFilename returns the filename to be used when retrieving this from the FileSpec cache.

func (*FileSpec) CacheHeight

func (ms *FileSpec) CacheHeight() int

CacheHeight returns the height of the file to save in the cache

func (*FileSpec) CachePath

func (ms *FileSpec) CachePath() string

CachePath returns the complete path (within the cache directory) to the file requested by this FileSpec

func (*FileSpec) CacheWidth

func (ms *FileSpec) CacheWidth() int

CacheWidth returns the width of the file to save in the cache

func (*FileSpec) MimeCategory

func (ms *FileSpec) MimeCategory() string

MimeCategory returns the first half of the mime type

func (*FileSpec) Resize

func (ms *FileSpec) Resize() bool

Resize returns TRUE if the FileSpec is requesting that the file be resized.

type MediaServer

type MediaServer struct {
	// contains filtered or unexported fields
}

MediaServer manages files on a filesystem and performs image processing when requested.

func New

func New(original afero.Fs, cache afero.Fs) MediaServer

New returns a fully initialized MediaServer

func (MediaServer) Delete

func (ms MediaServer) Delete(filename string) error

Delete completely removes a file from the MediaServer along with any cached files.

func (MediaServer) FileSpec

func (ms MediaServer) FileSpec(file *url.URL, defaultType string) FileSpec

FileSpec returns a new FileSpec for the provided URL

func (MediaServer) Get

func (ms MediaServer) Get(filespec FileSpec, destination io.Writer) error

Get locates the file, processes it if necessary, and returns it to the caller.

func (MediaServer) Process

func (ms MediaServer) Process(file afero.File, filespec FileSpec) (io.Reader, error)

Process decodes an image file and applies all of the processing steps requested in the FileSpec

func (MediaServer) Put

func (ms MediaServer) Put(filename string, file io.Reader) (int, int, error)

Put adds a new file into the MediaServer.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL