open source CMS and server for video streaming platform - nginx

I have to propose a platform that allows streaming video services employing the MPEEG-DASH standard. This platform blocks must be implemented with open source tools. I proposed FFmpeg to encode and MP4Box/GPAC tool for encryption and packaging. For the DRM case my propose is to use Widewine (I didn’t find any other open source tool) which is compatible with dash.js (the player proposed by me), it can be integrated to Chrome and according to CastLabs it’s also compatible with MP4Box. So, I have to select an open source CMS, and at the same time I need it to be compatible with dash.js. I read that it’s possible to add any JavaScript to these CMS, that it’s only necessary to create some modules to do so. I’d like to know which one of the following CMS you suggest me: MediaDrop, Drupal or Wordpress.
I also have some doubts about the server. I know that in order to offer this service it only takes a traditional HTTP server. In a first moment I chose Nginx over Apache because the latter presents some problems associated to performance (the server will receive a large amount of simultaneous requests), nevertheless, I discarded Nginx (Nginx-rtmp module) due to its constraints: it’s only for live streaming (I need the service to be offered also on demand) and the inputs must be RTMP. I found something about Nginx-based VOD packager, do you know if this one can be used as a server to offer live and on demand streaming service?

when it comes to DRM you will need other systems than just Widevine to reach all browser platforms, e.g. PlayReady for IE/EDGE or FairPlay with HLS for Safari. Here you can find a overview of the DRM systems for the different browsers: https://bitmovin.com/player-drm-support/
When you already use ffmpeg + MP4Box to encode and package the content, you don't need a dedicated VoD packager support on your webserver, you can just the DASH/HLS content on the HTTP Webserver. Here you can find a tutorial for x264 + MP4Box, maybe that's useful: https://bitmovin.com/mp4box-dash-content-generation-x264/

Related

Local URL fallbacks for offline development

I often work from remote, in the train or on places where I don't have any or a stable internet connection. Our app loads some fonts, CSS and JS from different CDNs (google and microsoft). When I'm offline I don't have access to this files and can't work properly.
Even worse, when I have a bad internet connection, my browser waits till it runs in a timeout, and this slows down everything.
Is there a solution where I can set up a local fallback for some URLs and server this content when no internet connection is available?
I'm on OS X, and maybe there is some proxy stuff out there I don't know which can handle such a thing. btw: HTTP would be enough, so no dealing with SSL would be necessary for development.
There's a great answer to a similar question on the webmasters StackExchange site. In short, you can use Charles Proxy to redirect certain requests to a local file. Should work well, as long as it's not a massive list of assets you have (or dynamic requests).
Alternatively, you could just use a build script of some sort (depends on your toolchain) to rewrite the asset URLs to local versions (and of course make sure they're pointing to the proper versions when committing code).

How are codecs registered?

I am trying to get a deeper understanding around the codec area and how it all works.
The primary drive is the uncertainty of installing codec packs to deal with certain unplayable videos, which ends up not allowing the playback of those files anyway. This is often later complicated by installing other codec packs on top. I have also noticed that sometimes simply reinstalling a codec pack can cause videos, which were playable before to be unplayable after codec pack reinstall.
What I am curious about the most is what is happening in the background when a codec pack is installed (Shark007, CCCP, K-Lite) - how are codecs registered with different players, windows media player in particular? Is there a list of known codecs in WMP internals which gets new codecs added to? How can I find out whether I have a particular codec for a particular encoding type? How does DirectShow and its filters work together with new codecs?
Most of the information that I have found has been quite top level, with most advice being playing around with codec pack settings and/or installing other codec packs.. :(
Any sort of advice or recommendations for further info on this area (books, links, etc) would be GREATLY appreciated! :)
In Windows the most widely used multimedia API is DirectShow, and as you indicated in question tag you perhaps target exactly it. There are other APIs too. Important note is that DirectShow is NOT the primary API for Windows Media Player: WMP would attempt to play a file through Media Foundation, and if failed, the second attempt would be to leverage legacy DirectShow. Still, DirectShow is the most commonly used in applications.
In DirectShow, the multimedia pipeline is built from filters which are connected into a graph through their pins. The connected structure has the data streamed through, e.g. from file to decoded video/audio delivered to the devices. The codecs are components that frequently used within this pipeline.
The registration of codecs is the scope of authority of Filter Mapper subsystem. It takes care of all registrations and provides connectivity options for Intelligent Connect - the subsystem which connects stuff together, including supplies codecs when they are needed and the application requests the codec to be provided automatically.
The best documentation of the internals you will find on MSDN, under DirectShow.

Serving WMV on a drupal site?

I have a WMV file that I need to host on my drupal 6.13 site (on ubuntu 9.x).
Is a there a relatively painless way to do this.
Do I need the "Video" module to do this?
Or can I just install a video player and point my WMV file to it?
My other concern is the user should be able to view this video on my site without needing to download anything, is WMV the appropriate format? I am worry about people viewing this on the mac and ios device.
Should I convert this to another format first?
Can I do all of the above with free software alone?
Thank a lot.
The de-facto standard, especially if you want to target iOS devices, is H.264: WMV is not going to cut it. Most Flash-based players (which you'll need for browsers like IE and Firefox that do not support H.264) also support H.264 video.
From a site administration standpoint, you'll need to either prevent users from uploading non H.264 video, or transcode the files once uploaded. This is not a trivial task, and you should use a contributed module for this. Video is probably the most far along in providing a turnkey video hosting solution.
There is also Kaltura, but it's a commercial service and they have historically failed to address privacy issues despite repeated warnings. There's a new maintainer in charge of the module, independent of the company, and the module may be safer to use than in the past.

How to Protect program from using on the SERVER?

I have a progam this is a converter for .NET that can be used in other .NET projects.
I have two kinds of license:
Developer license for DESKTOP software
Developer license for WEB server deployed software.
How I can protect my program if client buy (1) license he CAN NOT use it on the SERVER.
Disclaimer: I don't know anything about .Net, other than how to spell it, and I'm not completely sure about that.
It seems like one difference between a person using your file converter on their desktop and using it on a web server is that only a single instance will be running at a time on the desktop; a web page will probably have multiple instances, once per concurrent request. This seems like something you could enforce in software, and also something you could easily write into a license agreement.
Does IIS run with a graphical console on Windows? If it doesn't, and your desktop version does, maybe you could detect that?
Ultimately, though, if someone wants to get around your server/desktop distinction enough, they're going to; they could, for example, have the web server send the document to a desktop machine, and have the desktop send it back to the server. So, at some point, you'll have to give in and either ignore it or to say that's a problem for legal to handle.
If it is desktop software (I'm not sure by the question with the tag), you could use the Environment object to check what OS the code is running on and stop it running on Server Technology. This won't help if they run a server using XP or the like though, but it's a start.

Large file download in background, initiated from the browser

Is there any reasonable method to allow users of a webapp to download large files? I'm looking for something other than the browser's built-in download dialog - the requirements are that the user initiates the download from the browser and then some other application takes over, downloads the file in background and doesn't exit when the browser is closed. It might possibly work over http, ftp or even bittorrent. Platform independence would be a nice thing to have but I'm mostly concerned with Windows.
This might be a suitable use for BitTorrent. It works using a separate program (in most browsers), and will still run after the browser is closed. Not a perfect match, but meets most of your demands.
Maybe BITS is something for you?
Background Intelligent Transfer
Service Purpose
Background Intelligent Transfer
Service (BITS) transfers files
(downloads or uploads) between a
client and server and provides
progress information related to the
transfers. You can also download files
from a peer.
Where Applicable
Use BITS for applications that need
to:
Asynchronously transfer files in the
foreground or background. Preserve
the responsiveness of other network
applications. Automatically resume
file transfers after network
disconnects and computer restarts.
Developer Audience
BITS is designed for C and C++
developers.
Windows only
Try freeDownloadManager. It does integrate with IE and Firefox.
Take a look at this:
http://msdn.microsoft.com/en-us/library/aa753618(VS.85).aspx
It´s only for IE though.
Another way is to write a BandObject for IE, which hooks up on all links and starts your application.
http://www.codeproject.com/KB/shell/dotnetbandobjects.aspx
Depending on how large the files are, pretty much all web-browsers all have built-in download managers.. Just put a link to the file, and the browser will take over when the user clicks.. You could simply recommend people install a download manager before downloading the file, linking to a recommended free client for Windows/Linux/OS X.
Depending on how large the files are, Bittorrent could be an option. You would offer a .torrent file, when people open them in a separate download-client, which is seperate from the browser.
There are drawbacks, mainly depending on your intended audience:
Bittorrent is rarely allowed on corporate or school networks
it can be difficult to use (as it's a new concept to lots of people).. for example, if someone doesn't have a torrent client installed, they get a tiny file they cannot open, which can be confusing
problems with NAT/port-forwarding/firewalls are quite common
You have to use run a torrent tracker, and seed the file
...but, there are also benefits - mainly reduced bandwidth-usage on the server, as people download also seed the file.

Resources