December 25, 2011

Clouds and virtuality for Wowza and WMSPanel

Virtual services and cloud computing become more popular during last few years. No surprise that some resource-consumption solutions and products has been recently exploring that opportunity.

As example, Wowza Media Services provides Amazon AWS installation for those who wants to create scalable streaming solutions. There are many other companies that provide similar functionality. This gives a low threshold for companies that want to try providing streaming services. For mature companies this also allows re-structure their assets and increase overall robustness. You can even make your own cloud using software like Parallels solutions to be independent from 3rd-party vendors.

WMSPanel also uses this technology, we chose Rackspace for both staging and production environment. And of course it works fine with Wowza Media Server on Amazon EC2.

Please also read more about our current cloud architecture.

The pros of cloud solution for us are simple.
  1. Ready to use environment. No need to buy or rent a hardware when we need it. It's already there because virtual machines are always available.
  2. Scalability is a big advantage. When a large customer starts some free evaluation (since first 2 weeks are free of charge) we may see some overload. In this case we can just switch to another service plan to keep our customers out of trouble and to have plenty of time to optimize things.
  3. When a customers wants a separate branded instance of WMSPanel, we can setup a virtual machine that will handle his own requests without any intersection with other customers.
The only contra is that pricing plans are missing granularity, i.e. in case of increased consumption we have to buy more than we actually need. This means extra stability for our customers but a bit bigger price for us.

Given all pros and cons we can already say for sure that optimization has its cost, literally. When we optimize our software, we can see numbers that say how much we cut down our expenses and hence what service price may be optimal for our customers.

This also means that we may provide agile customers pricing. And cost becomes much lower as long as we keep implementing and improving WMSPanel.

WMSPanel cloud control is also used for controlling Nimble Streamer, a light-weight HTTP streaming server for HLS, Smooth and progressive download streaming and re-streaming.

November 21, 2011

Windows Media: adding publish points

Greetings!

Recently we've deployed a new WMSPanel feature for Windows Media Services. Some customers wanted to be able to add publish points via our web interface. WMSPanel is already able to control server behavior - starting and stopping servers. So now our customers are able to add publish points as well.

Currently both broadcasting and on-demand publish points are supported.

To add a publish point, a customer admin should go to a server page and click on "Add publish point". Then enter a name, a path to a source within a server and choose PP type. Click "Add publish point" button to perform the addition.

Adding a broadcasting publish point for WMS
Adding on-demand publish point for WMS

That's it. Once a publish point is added, it data will be available on graphs.

Read our blog for more information on current and upcoming features. Contact us for more information.

November 10, 2011

WMSPanel architecture from scalability, security and usability perspectives


When we initially started working on system architecture our main ideas were like described below. Note that the industry term "design" often refers to "architecture" and so will we.
  • Make our system as secure as possible. Security is a very complex task in case when your servers are accessible from Internet. When we started to think about WMSPanel development we checked current solutions publicly available and found out that most of them were desktop applications. From technically point of view this means that desktop application requests information from media servers and presents to a user. So media server should seat and wait for user request and provide necessary information. Most solutions install RDMS on media servers to save and process statistic for the media server. Currently almost all analytic and control media solutions have been moved to the web. But almost all of them still have old design. Their control panels initiate connections to media servers and load logs and perform server related operations. This is a very pure POOL system architecture that forces your system administrator to add additional rules to open additional control ports on media server. In additional your web site cannot process media server data when it want to send it to you. Media Server should seat and wait when web site is ready to call it. In addition, a "pool" architecture has a very bad scalability. If you have 1000 servers you need to call all of them and you should have very clever scheduler to process servers in time. Our solution has a PUSH architecture. When Media Server is ready to push some new data to a panel, it just does that. If there's nothing to say - it can stop sending for some time. In addition, our clients' admins don't have to open additional control ports. We also use industry proven HTTPS protocol to send our data to a panel. We don't even have an option to use HTTP to do that. Both wmspanel.com and on-site client's installations MUST have a valid SSL certificate and the system doesn't have an option to suppress this. Your data will not be accidentally sent to a wrong server or cannot be cought and decrypted. Server registration procedure is very secure as well and use HTTPS to register server. Solution accept only valid certificate during registration. Panel web-site use the same certificate so when you want to work with your servers you are under the shield as well.
  • Make installation process as simple as possible. We don't want our clients' admins to play with configs, to manually copy solution libraries etc. We tried to do all necessary things during the installation. We are proud that we spent a lot of time but made installation process as simple, clear and secure as it is.
  • Support all versions of media servers we integrate with. Support them on all platforms where media servers works for all supported architectures. Currently we support Windows Media Server and Wowza Media Server. This means that if you have one or both you can use our solution regardless of their versions.
You can already tell that our architecture goals were achieved in current system implementation.

Please also examine our current cloud architecture.

November 2, 2011

Wowza Media Server client types supported by WMSPanel


Currently we support all client types what Wowza Media Server supports.

HTTP types
  • Flash HTTP Streaming known as HTTP SAN JOSE
  • Apple HTTP Live Streaming (Cupertino Streaming - iPhone, iPad, iPod touch) known as HTTP CUPERTINO
  • Smooth Streaming (Microsoft Silverlight) known as HTTP SMOOTH
RTSP
RTSP/RTP/MPEG-TS (QuickTime, VLC, mobile devices, set top boxes, encoders)

RTMP
Real Time Messaging Protocol (RTMP - Adobe Flash Player)

For all streams you will see client type and you will be able to analyze how your customers access to your streams.

November 1, 2011

Can I add both Wowza and Windows Media server to the panel?

Sure you can !

Just follow instructions for Wowza to add Wowza server and use instructions for Windows Media Server to add WMS. You will see common statistics for both server types.

Just register, try it and let us know what you think about our panel capabilities.

October 5, 2011

Maven template for Wowza

First of all let me explain why I decided to develop WMSPanel Wowza integration using Maven.
When I started my first steps with Wowza I downloaded Wowza IDE and easily made my first test project. All looked just fine but after some time I decided that Wowza IDE is not applicable in my case because of the following reasons.
  1. It does not support full development cycle. You can create Module or Listener but you cannot create and run Unit Tests, cannot add dependencies that will be copied with your jar before Wowza launch.
  2. After any change of any source file IDE tries to build jar and copy it. I want to have ability to implement some features and then build jar and copy it explicitly.
  3. There are a lot of libraries we cannot work in general. Apache langs and codacs, joda time library. Those who work with Java professionally knows what I'm talking about. Maven is just great when you need to add publically available libraries.
  4. You cannot control jar manifest produced by IDE. If you need your jar to have some additional attributes you should use Maven. Wowza IDE cannot help you here.
Wowza IDE produces regulair jar file with our compiled classes included so we use maven-jar-plugin for making jar library as well.

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.3.1</version>
                <configuration>
                    <finalName>${project.artifactId}</finalName>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>${libFolderName}/</classpathPrefix>
                        </manifest>
                        <manifestEntries>
                        </manifestEntries>
                        <addMavenDescriptor>false</addMavenDescriptor>
                    </archive>
                </configuration>
            </plugin>

Since your library most probably needs to have dependencies you should separate your dependencies from Wowza server libraries and third-party libraries. This is why we add classpath to our dependency folder into jar manifiest. In addition we ask not to include our pom.xml to resulting jar.

To build our jar file as wowza extention we need to have compile time dependency on Wowza libs.

Our test template depends on wms-server.jar and wms-stream-publish.jar. So we copy these libraries to project' lib folder from wowza/lib folder and add them to dependency section.

    <dependencies>
        <dependency>
            <groupId>com.wms</groupId>
            <artifactId>wms-server</artifactId>
            <version>${wms.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.wms</groupId>
            <artifactId>wms-stream-publish</artifactId>
            <version>${wms.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>1.6</version>
        </dependency>
    </dependencies>

As you can see I added joda runtime library dependency to the project. I don't use joda in code but just added this runtime dependency to show how dependency copy works with maven. You can see joda library in wowza\lib\dep-libs after mvn package


Since neither wms-server.jar nor wms-stream-publish.jar are Maven repository libraries we need to introduce them to Maven. Take a look at maven-install-plugin in pom.xml below. Before packing solution you should call mvn validate each time you add new dependency you need to install. During validate phase maven-install-plugin plugin adds all libraries it's configured with into local Maven repository.

To copy "runtime" library dependencies I use maven-dependency-plugin. It copies all runtime dependencies to target/deps-lib subfolder.

Before launching Wowza you need to copy resulting jar with all dependencied to wowza/lib directory.
I use maven-antrun-plugin for this purposes. When you call mvn package system builds jar and copies jar and it's dependencies to wowza/lib.

The last major case I missed to discuss is debugging. I checked how debugging works for Wowza IDE. It just calls JVM with following parameter(Wowza 2, 3.x)
-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:3387,suspend=y,server=n -Xmx768M "-Dcom.wowza.wms.AppHome=C:/Program Files/Wowza Media Systems/Wowza Media Server 2.2.4" "-Dcom.wowza.wms.ConfigHome=C:/Program Files/Wowza Media Systems/Wowza Media Server 2.2.4" -Dcom.sun.management.jmxremote=true -Dfile.encoding=Cp1251 -classpath "C:\Program Files\Wowza Media Systems\Wowza Media Server 2.2.4\bin\wms-bootstrap.jar" com.wowza.wms.bootstrap.Bootstrap start

Or for new Wowza Engine(aka Wowza 4.0)
-agentlib:jdwp=transport=dt_socket,address=127.0.0. 1:3387,suspend=y,server=n -Xmx768M -Dcom.wowza.wms.AppHome=/usr/local/WowzaStreamingEngine -Dcom.wowza.wms.ConfigHome=/usr/local/WowzaStreamingEngine -Dcom.sun.management.jmxremote=true -Dcom.wowza.wms.native.base="linux" -classpath "/usr/local/WowzaStreamingEngine/bin/wms-bootstrap.jar" com.wowza.wms.bootstrap.Bootstrap start
 
So I just get parameters IDE uses and configured exec:java goal to use JVM parameters above. Open project using any IDE with Maven support and configure Maven goal exec:java and find where you can pass JVM parameters. Pass parameters above and use Debug mode to execute goal since Run mode will not work. If you need Run mode working you need to call Wowza IDE in Run mode and get parameters it uses to call java and then add new exec:java goal with params for Run. I just use Debug during development cycle and don't use Run.

Please note that my approach to Wowza is not yours and you most probably need to fix JVM params. In addition I use Windows and if this is not your case you should change all paths in JVM params appropriately.

Our Wowza Maven template is hosted on GitHub, you can download it there and try. I added Server listener from the following article http://www.wowza.com/forums/content.php?162-Server-side-publishing-using-the-Stream-class so follow installation instruction, such as config change, before you can start Wowza.


The approach described above is just little a example of our WMSPanel agent build system. We have comprehensive installer what fixes Wowza configs during installation, installs resulting Wowza library and its dependencies when client runs it on a production Wowza server. We provide consulting services for existing and new Wowza projects. So if you want to have comprehensive installer for Wowza, run unit test during package your project or use any IDE with Maven support, we can help you.

You may also check WMSPanel, a centralized Wowza reports and statistics web-based solution. It uses Wowza agent for gathering core streaming data and present it via a web server.

Take a look also at Nimble Streamer, the light-weight streaming server for HLS, Smooth and progressive download streaming and re-streaming.

July 29, 2011

Proudly present TotalStream as our largest customer

Greetings!

We are proud to announce that we've completed a new customer installation. TotalStream, Inc., a large CDN provider that specializes in highly scalable video delivery solutions, is now using WMSPanel to track Windows Media Services video streaming for their clients.

They've made a big contribution in WMSPanel functionality by proposing and trying new features that are either currently implemented or planned for nearest releases from our roadmap.

That is an example of on-site installation of our solution that is available on demand.

Sing up to become one of our next customers and get 2 weeks of service free of charge using our web service.

April 18, 2011

How to know who is restreaming your content

In the previous article we described how to prevent unauthenticated usage of your computational resources. Here we'll try to define the next imminence - your users can capture and restream your content. In the next article in our technical blog we'll try to cover common approach used by re-streamers but meanwhile let's assume (and this is a truth) that re-streamer's software pretends to be a regular player.

How can we determine that somebody is a re-streamer if he is an authenticated user and his software looks like regular players? There's no simple answer here. But there are some observations about re-streamers what we can use to distinguish:

  1. re-streamer typically watches many channels at the same time;
  2. re-streamer watches almost 24 hours a day everyday;
  3. if you're almost sure that you've find re-streamer try to disconnect him from his channels. His software will try to connect immediately. Human cannot do this for example in early morning and most probably this is re-streamer' software that tries to reconnect your channels as soon as it's possible to proceed with stealing your content.

These markers above are very weak in particular but together they can help us to find a violator.
So what should we do from technical point of view? We need to collect all statistics about players and analyze it. We need to get information from all servers in your farm but not from individual servers since only common report from all servers can show actual picture. These statistics are very important not only for re-streaming prevention. Knowing what user watches we can process him in a special way, e.g adding appropriate adds, showing updates about new available materials he probably wants to view. As you can see re-stream prevention is much more complicated than link republishing defense - but it's not impossible though.

Currently we are in active development and testing of such analysis system and if you want to get more details about it - let us know. Once we finish we'll provide an appropriate review of this system and let you try it.

The next article in our technical blog will try to cover common approach used by re-streamers: their tools, methods etc. You need to understand what you're defending yourself from to apply appropriate methods. If you want to setup your streaming environment securely - we can help you here.

Take a look at Streaming paywall security and control


Related documentation


Paywall security and control,