If you’re producing a live streaming event, you have three choices when it comes to encoding: You can hire out the work, buy a streaming appliance, or build your own streaming encoder. If you choose the third approach and want to stream HD H.264 video via Flash, Kulabyte’s XStream Live 2.1 Flash video encoder needs to be on your short list. While the interface is still (to put it kindly) a work in progress, the encoder proved very efficient and reliable and produced excellent video quality.
Let’s start with some speeds and feeds. The software costs $6,495 per server with no CPU core limitation. It can use FireWire input for SD streams and is compatible with input cards from both AJA and Blackmagic Design for HD. I used Blackmagic DeckLink HD Extreme for my tests.
As an overview, Kulabyte’s software includes a feature called the Preset Maker and the XStream Live encoder, which can produce up to four simultaneous streams if your computer is sufficiently powerful. Operationally, you create your preset first, load it into the encoder during event setup, and then press the magic Start button to start producing the stream. When you create the preset, you designate the target server, stream names, and other details; you can choose to save an archive file during the event.
Figure 1. Kulabyte’s Preset Maker lets you designate both primary and secondary streams.
Creating Your Presets
Kulabyte’s Preset Maker (Figure 1) is a very spare application that deals more with stream and connection issues than preprocessing and encoding parameters, though this likely will change in future versions. You can create a preset with up to four outputs of varying parameters with the multiple files available as source files for dynamic streaming in a live event scenario. With each output, you can designate both a primary and a backup stream—a nice bit of redundancy that lets you seamlessly switch to the backup stream should you encounter any problems with the primary.
Blackmagic integration within the Preset Maker wasn’t quite complete; for example, the HDMI input that I ultimately used for my testing wasn’t available as an Input Type option. To make it work, I had to modify the XML code in the preset itself. In addition, most preprocessing and encoding options are not presented in the Preset Maker, so you’ll have to modify them (if necessary) via XML as well (Figure 2). Fortunately, the product manual does a nice job defining the text strings for all relevant options, so whileyou wouldn’t call the interface cushy, it’s certainly workable.
Figure 2. Parlez-vous XML? You’ll need to change any encoding or preprocessing options.
Kulabyte uses the MainConcept H.264 encoder, a consistent leader in all of my H.264 codec comparisons. It exposes a wonderful range of advanced encoding parameters, from entropy encoding techniques to enabling pyramid B-frame encoding and setting quantization values for I-, B-, and P-frames. Still, if you’re the type who likes to tinker with advanced H.264 settings, you’d better bone up on your XML.
Video input controls will depend upon the capture card you use, with none available for FireWire. With the Blackmagic card, I had to set inputs and other preferences in the Blackmagic Control Panel and then set them again in the Kulabyte Preset Maker. It’s been a while since I’ve added an input card to a computer, and it took a while to get all the inputs and outputs configured and working properly. Nothing onerous, but you should budget plenty of time for installation and shakeout before your first live event.
I installed the Blackmagic card and Kulabyte Encoder on a 3.0 GHz Quad-Core HP xw4600 workstation running Windows XP with 3GB of RAM. To test the live output, I installed a trial version of the Adobe Flash Media Server 3.5 on a 3.2 GHz Quad-Core Z400 HP workstation running 64-bit Windows XP with 6GB of RAM. After running my tests, I wished that I had installed the encoder on the Z400, if not the eight-core Nehalem-based Z800. Though I was able to produce two streams simultaneously without problems on the xw4600, you’ll almost certainly need an eight-core system to produce four simultaneous streams.
Figure 3. The Kulabyte XStream Live software, streaming away.
Once you’ve created your preset and created and configured your video input, you’re ready to start streaming. Run the Kulabyte XStream Live application, load the preset, start the video feed, and click the Start button; the encoder will then start pushing the streams. I started by testing a single stream produced at 720p parameters at 2,200Kbps. But after discussions with Kulabyte reps, I switched to encoding two simultaneous streams to match the product’s most common usage in the field. In these tests, I produced one stream of 960×540 H.264 video at 1,300Kbps and the other at 640×360 at 840Kbps.
Once you start encoding, status lights display the status of the primary, secondary, and archive streams, while an audio meter bounces along on the left, confirming that you’re streaming audio with your video. On the bottom right, the program displays current CPU usage, which is critical to monitor—if you get close to 100%, it could interrupt the stream. If this occurs, you can disable a stream and click Update Settings, and the server will discontinue that stream. It’s a pretty drastic measure that you should be able to avoid with pre-event testing, but it’s nice to know that it’s an option should CPU utilization unexpectedly rise.
As you can see in Figure 3, producing two streams on the HP xw4600 workstation consumed 78% of the CPU, which is high but still within a comfortable range. I tried encoding one 720p stream with one smaller stream, but CPU utilization kept pushing the 100% mark. Again, your results will vary according to the power of the host CPU. And remember, for four simultaneous streams, count on needing an eight-core system.
Figure 4. Monitoring the live stream from the Flash server.
I tested the Kulabyte server with some footage from a local square dance. I shot the event with the Panasonic HMC-150, which captures in full resolution, full data rate AVCHD. To test the encoder, I input the video via HDMI, pushing the stream to the Flash Media Server and an archive file. I was able to watch and monitor the stream from the Flash Media Server for the full 60-minute test (Figure 4). I can’t say it was the most intriguing hour I’ve ever spent, but out in the country where I live, honing your square-dancing skills is always a good idea—gives you something to talk about at the next hog slop.
More to the point, the stream played without interruption throughout the test. To assess the quality of the output, I encoded the AVCHD source files from the square dance to the 960×540 parameters using the Adobe Media Encoder and compared the two streams (Figure 5).
Figure 5. Kulabyte’s live quality matched the quality produced by the Adobe Media Encoder.
Encoding is a very search-intensive process as the encoder works to find interframe redundancies that help improve compressed quality. Given that the Adobe Media Encoder produced the video files in roughly 2x real time, I had expected the Adobe stream to look significantly better than the real-time Kulabyte stream. Although there were some quality differences, they were very minor and certainly wouldn’t be noticed by a casual viewer. Overall, though ease of use could (and will) be improved, from a performance and quality standpoint, the Kulabyte encoder performed exceedingly well.