mediaserver

package module
v0.15.2 Latest Latest
Warning

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

Go to latest
Published: Jan 26, 2025 License: Apache-2.0 Imports: 18 Imported by: 6

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       // Original filename
	OriginalExtension string       // Original file extension
	Extension         string       // File extension including a dot (.mp3)
	Width             int          // For images and videos, the requested width
	Height            int          // For images and videos, the requested height
	Bitrate           int          // For audio and videos, the audio bitrage
	Metadata          mapof.String // Metadata to add to the outbound file
	Cache             bool         // If TRUE, then allow caching
}

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

func (*FileSpec) AspectRatio added in v0.11.0

func (filespec *FileSpec) AspectRatio() float64

func (*FileSpec) CacheHeight

func (filespec *FileSpec) CacheHeight() int

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

func (*FileSpec) CacheWidth

func (filespec *FileSpec) CacheWidth() int

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

func (*FileSpec) DownloadFilename added in v0.14.0

func (filespec *FileSpec) DownloadFilename() string

DownloadFilename returns the name that should be used when downloading the file.

func (*FileSpec) MimeCategory

func (filespec *FileSpec) MimeCategory() string

MimeCategory returns the first half of the mime type

func (*FileSpec) MimeType

func (filespec *FileSpec) MimeType() string

func (*FileSpec) OriginalMimeCategory added in v0.13.0

func (filespec *FileSpec) OriginalMimeCategory() string

func (*FileSpec) OriginalMimeType added in v0.13.0

func (filespec *FileSpec) OriginalMimeType() string

func (*FileSpec) ProcessedDir added in v0.15.0

func (filespec *FileSpec) ProcessedDir() string

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

func (*FileSpec) ProcessedFilename added in v0.15.0

func (filespec *FileSpec) ProcessedFilename() string

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

func (*FileSpec) ProcessedPath added in v0.15.0

func (filespec *FileSpec) ProcessedPath() string

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

func (*FileSpec) Resize

func (filespec *FileSpec) Resize() bool

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

func (*FileSpec) WorkingFilename added in v0.15.0

func (filespec *FileSpec) WorkingFilename() string

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, processed afero.Fs, working *WorkingDirectory) 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) Process

func (ms MediaServer) Process(filespec FileSpec, output io.Writer) 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) error

Put adds a new file into the MediaServer.

func (MediaServer) Serve added in v0.15.0

func (ms MediaServer) Serve(responseWriter http.ResponseWriter, request *http.Request, filespec FileSpec) error

Serve locates the file, processes it if necessary, and returns it to the caller. If the filespec.Cache is set to FALSE, then file will be processed and returned. If the filespec.Cache is set to TRUE, then the processed file will retrieved from the cache (if possible) and the processed file will be stored in the cache.

type WorkingDirectory added in v0.15.0

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

WorkingDirectory manages files added and removed to the working directory.

func NewWorkingDirectory added in v0.15.0

func NewWorkingDirectory(folder string, ttl time.Duration, capacity int) WorkingDirectory

NewWorkingDirectory returns a fully initialized WorkingDirectory object

func (*WorkingDirectory) Close added in v0.15.0

func (wd *WorkingDirectory) Close()

Close shuts down the working directory, all background processes, and deletes all files from the filesystem

func (*WorkingDirectory) Exists added in v0.15.0

func (wd *WorkingDirectory) Exists(name string) bool

Exists returns TRUE if the file exists in the working directory

func (*WorkingDirectory) Open added in v0.15.0

func (wd *WorkingDirectory) Open(name string) (*os.File, error)

Get loads the file from the working directory and resets the TTL. It is the caller's responsibility to close the file when finished.

func (*WorkingDirectory) Remove added in v0.15.0

func (wd *WorkingDirectory) Remove(name string)

Remove deletes a file from the working directory This should trigger the onDelete event for the file.

func (*WorkingDirectory) RemoveAll added in v0.15.0

func (wd *WorkingDirectory) RemoveAll()

RemoveAll deletes all files from the working directory This should trigger the onDelete event for each file.

func (*WorkingDirectory) Write added in v0.15.0

func (wd *WorkingDirectory) Write(name string, reader io.Reader) error

Write adds a new file into the working directory, and sets a TTL for the file to be deleted

Directories

Path Synopsis
Package ffmpeg wraps the ffmpeg command line tool for use in Go programs.
Package ffmpeg wraps the ffmpeg command line tool for use in Go programs.

Jump to

Keyboard shortcuts

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