GithubHelp home page GithubHelp logo

deepch / afrostream-media-server Goto Github PK

View Code? Open in Web Editor NEW

This project forked from simplydata/afrostream-media-server

0.0 3.0 0.0 47 KB

Afrostream Media Servers (AMS) let you create DASH format on the fly with one or multiple audio/video mp4 files

License: BSD 3-Clause "New" or "Revised" License

Go 100.00%

afrostream-media-server's Introduction

Afrostream Media Server (AMS)

Afrostream Media Server is a streaming software implemented in Go under BSD Licence.

Synopsis

With Afrostream Media Server (AMS), you can stream MP4 audio/video files to various formats (like DASH, HLS and Smooth Streaming). Currently, the 0.1-alpha version only supports DASH, The implementation of HLS and Smooth Streaming is underway. The goal of this project is to provide an Unified Streaming like OpenSource software. Feel free to contact and/or join us to participate to this great project. AMS is considered as experimental.

Demo

For the demo, we use the DASH IF Reference Client 1.5.1. Click on the DASH IF Reference Client 1.5.1 link and enter the following URL:

http://origin.afrostream.tv:8000/vod/demo_ams/Big_Buck_Bunny_1080p_surround_FrostWire.com.json/.mpd

AMS is running on port 8000 and distribute Big Bug Bunny in DASH format. All profiles has been generated following the How to run section.

Contact

All feedbacks are welcome, you can contact me in different ways (to contribute or talk about the project):

IRC: irc.freenode.net #ams
Skype: spebsd
Email: [email protected] or [email protected]
Slack: opensource-ams.slack.com

How to build

AMS is developped in GoLang so you can build the software for any Operating System you want.

First, clone the github project to a local directory:

git clone https://github.com/Afrostream/afrostream-media-server.git

Enter to the directory freshly created by git:

cd afrostream-media-server

For the next step, you will need Go installed, please refer to the Go website for installing.

Build amspackager (the packager) and ams (the media server), replace with the base directory where you ran git clone command:

export GOPATH=<fullpath>/afrostream-media-server
go build amspackager.go
go build ams.go

Install binaries in a bin directory (eg: /usr/local/bin or /usr/bin):

cp amspackager /usr/local/bin/
cp ams /usr/local/bin/

Now you've two binaries amspackager and ams installed on your OS.

How to run

The first thing to do is creating mp4 files needed by amspackager and ams to create DASH fragments. We use FFMpeg software to generate these mp4 files.

First, We create 4 video profiles and 1 audio profile with a video.mp4 files containing 1 video stream and 1 audio stream:

ffmpeg -i video.mp4 -y -vf yadif=0:-1:0,scale="426:trunc(ow/a/2)*2",setsar=1:1 -c:v libx264 -preset:v fast -profile:v baseline -level 3.0 -coder:v 0 -b:v 400k -minrate 400k -maxrate 400k -bufsize 400k -g 50 -keyint_min 50 -sc_threshold 0 -pix_fmt yuv420p -map 0:v -an -map_chapters -1 -threads 0 video_h264-426x240-400.mp4
ffmpeg -i video.mp4 -y -vf yadif=0:-1:0,scale="640:trunc(ow/a/2)*2",setsar=1:1 -c:v libx264 -preset:v fast -profile:v baseline -level 3.0 -coder:v 0 -b:v 800k -minrate 800k -maxrate 800k -bufsize 800k -g 50 -keyint_min 50 -sc_threshold 0 -pix_fmt yuv420p -map 0:v -an -map_chapters -1 -threads 0 video_h264-640x360-800.mp4
ffmpeg -i video.mp4 -y -vf yadif=0:-1:0,scale="854:trunc(ow/a/2)*2",setsar=1:1 -c:v libx264 -preset:v fast -profile:v baseline -level 3.1 -coder:v 1 -b:v 1600k -minrate 1600k -maxrate 1600k -bufsize 1600k -g 50 -keyint_min 50 -sc_threshold 0 -pix_fmt yuv420p -map 0:v -an -map_chapters -1 -threads 0 video_h264-854x480-1600.mp4
ffmpeg -i video.mp4 -y -vf yadif=0:-1:0,scale="1280:trunc(ow/a/2)*2",setsar=1:1 -c:v libx264 -preset:v fast -profile:v main -level 3.1 -coder:v 1 -b:v 3000k -minrate 3000k -maxrate 3000k -bufsize 3000k -g 50 -keyint_min 50 -sc_threshold 0 -pix_fmt yuv420p -map 0:v -an -map_chapters -1 -threads 0 video_h264-1280x720-3000.mp4
ffmpeg -i video.mp4 -y -vn -acodec libfaac -ac 2 -ab 128k -ar 48000 -map 0:a:0 -map_chapters -1 -threads 0 video_aac-128.mp4

Output profiles will be:

Video H264 @  426x240   400kbits/s Baseline profile (3.0)
Video H264 @  640x360   800kbits/s Baseline profile (3.0)
Video H264 @  854x480  1600kbits/s Baseline profile (3.1)
Video H264 @ 1280x720  3000kbits/s Main profile (3.1)
Audio AAC  @  48000Hz   128kbits/s

Move all mp4 files to a directory that you'll use for the HTTP media server document root, cd to this directory and run amspackager to prepare the content for AMS:

/usr/local/bin/amspackager -o video.json -d 8 -i video_h264-426x240-400.mp4 -i video_h264-640x360-800.mp4 -i video_h264-854x480-1600.mp4 -i video_h264-1280x720-3000.mp4 -i video_aac-128.mp4

Output will be:

AMSPackager -- [email protected] / Afrostream

-- Parsing file='video_h264-426x240-400.mp4' language='eng'
-- Parsing file='video_h264-640x360-800.mp4' language='eng'
-- Parsing file='video_h264-854x480-1600.mp4' language='eng'
-- Parsing file='video_h264-1280x720-3000.mp4' language='eng'
-- Parsing file='video_aac-128.mp4' language='eng'

-- Creating package file 'video.json'

All files has been packaged successfully

If you have vtt subtitles files, you can add them with -i video.en.vtt -l eng -i video.fr.vtt -l fra ... Your video is prepared for AMS, so let's run Afrostream Media Server as root and listening on HTTP port 80 (you can package any video files on the fly without restarting AMS):

# /usr/local/bin/ams -d <document_root_path> -p 80

Now, you can request URL

http://<ip_of_your_server>/video.json/.mpd

with a dash player like DASHJS. That's all.

TODO

Functionnality Implemented
DASH on-the-fly Yes
HLS on-the-fly No
Smooth Streaming on-the-fly No
Live support No
Support mp4 files > 4GB No
HEVC/H.265 No
DRM No

Bugs

There is probably some bugs in this implementation, all mp4 parsing has been developped in pure GoLang, no external libraries has been used. If you see any bugs please report to [email protected] or [email protected].

afrostream-media-server's People

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.