Wowza Community

Powerpoint Presentations with Wowza

Hi

I apologise for being slightly lazy with this but I googled you and could not find a solution.

From first principles how would I go about streaming, or presenting live, a PowerPoint presentation?

You can also push messages through hls packets and catch them in javascript, you just cant use the

There are many possibilities.

You can use something that can capture your desktop such as VLC, FFmpeg, Java, or the camera utility that came with your computer.

A more bandwidth efficient solution would be to store the powerpoint in some representation on the client and then control switching of slides remotely. You can export Powerpoint slides to jpeg, HTML, SWF. You can control remote clients with RTMP RPC (through Wowza), or with your webserver using polling, Ajax or HTML5 Websockets.

You could probably even use .NET and the Powerpoint application natively.

i’m using sharedObject to achieve this. it brings me this question: sharedObject versus netStream.sendDirect: what difference in performance ? to me sharedObjects always did the trick ok. i can see the interest of recording cuepoint for playback of a recorded presentation, are there any other advantages of netStream.sendDirect rather than sharedObjects ?

If you do this on the server or with Netstream.send or IMediaStream.send or IMediaStream.sendDirect

stream.sendDirect("onTextData", data);

the AS3 client-side of is cuepoint handling:

var clientObj:Object = new Object();
clientObj.onTextData(data:Object):void
{
trace(data.message);
});
netstream.client = clientObj;
netstream.play("myStream");

Also, IMediaStream.sendDirect also takes care of recording the cuepoint if the stream is being recorded, is the only difference to IMediaStream.send

Richard

I used Captivate in a project to do this. It has a javascript api that you can use ExternalInterface API in Flash AS3 with. The javascript api was incomplete in some way, at the time anyway, related to the issue jay_charles mentioned

Richard

You have finer, richer control with Netstream.send and NetConnection.call on the RTMP client-side, and IMediaStream.sendDirect, IClient.call and IApplicationInstance.broadcastMsg on the Wowza server-side. I supppose that SharedObjects are higher overhead as well, as there is more to manage, but I cannot quantify or qualify that exactly.

Richard

John,

Re the missing link, this is the current version of that article

https://www.wowza.com/docs/how-to-inject-cue-points-or-metadata

Richard

You can also use RTMP messaging for flash and HLS metadata (for iOS only) to send slide sync data through the video stream, the idea being that the ppt is converted into a series of images, and the metadata in the stream handles triggering events on the client application to load the images at the appropriate time. That way, you don’t need to poll or rely on websockets (which aren’t fully supported across all browsers just yet), and you can be certain that the slides will remain in sync with the stream.

Randall had a good point about .NET . If you need to automate the process of converting the ppt to images, you can use the Microsoft interop classes and the Office PID. Of course, you’ll need to have powerpoint running on the server for that, and you’ll need to consider concurrency if you’ll be handling a lot of powerpoint files (running multiple office automation processes concurrently is a bad idea). If you go that route, feel free to ask questions… it’s something I’ve done in the past.

Not sure if there’s a tutorial available on the site, but the general principle is that you’d use IMediaStream.sendDirect to pipe the messages into the stream, and on the client side you’d have a method on the NetStream.client object to receive and process the messages.

… alternately you can send the messages from a flash client using NetStream.send, but that makes the assumption that the flash client is also handling the video encoding.

One other thing you’ll need to consider… late joiners.

If you’re sending events over the stream, you’ll want to send the event identifying the current slide every few seconds. The idea here being that if someone joins the broadcast 3 seconds after the last stream event, and you aren’t sending those events on an interval, the late joiner won’t get a stream event until the next one is sent (am I being clear there)?

If you’re only targeting Flash clients, you could have the client make a call to the server to get the current slide data right after the connection is established. If you plan to target iOS clients as well (which requires quite a few additional steps to send metadata through the stream and handle on the client side), you won’t be able to use this method.

The upside to using stream events rather than shared objects is reliability of sync. If the end user is having latency or throughput issues that cause the stream to be received in lass than real time, the events on the shared object could end up out of sync with the stream (for example, the shared object value could update ahead of the correlating point in time in the stream, making it seem that slides are changing too early).

If you are serving a lot of clients (read: thousands) from a single server, I assume the computational cost of sending out the sync events and versioning the data on the shared object would make things a bit less performant as opposed to sending the events over a stream, but in my experiences I haven’t had a problem there.

Hi jay

yes the RTMP route would be the way I would wish to go. Can anyone direct me to the correct tutorial here to use this with Wowza?

Thanks!

Hi Guys

I’ve read through this and I get the principles. However is there somewhere you can point to that shows how and where to use these from first principles? e.g. where on the server would I write “stream.sendDirect(“onTextData”, data);”?

Any pointers to using netstream etc would be very helpful

Nice one guys. A lot of food for thought here.

Many thanks. really appreciated. I’ll update you when I make progress.

Hello again

I was wondering if there is any relevance in this thread? http://www.wowza.com/forums/showthread.php?8712-Publishing-power-point-with-webacast-viewer

I noticed that the link to another thread has now been removed; is there anywhere I can locate this?

Hi John,

Read through the UserGuide chapter 8, “Extending Wowza Media Server”. You’re going to need to dive into the Wowza IDE, and also probably FlexBuilder 4.5 or Flash Pro CS5 to make yourself a Flash/Flex application with which you will control the Powerpoint on the clients. You can look at the LiveStreamRecord module for an example of Flash client->server RPC.

A suggestion off the top of my head: First, export the .ppt to HTML. Write your custom flash player such that the “presenter” has a “next page” button. That button runs a client->server RPC, which then runs a server->client RPC on all the clients, which calls a Javascript function, which switches to the next page.

Jay and Richard make great points. RTMP might not be available on tablets and such. Pushing slide changes should probably be done using HTML5 (like Captivate) web sockets which I think almost all current browsers support.

Hi jay

Can you please tell me how to use HLS metadata to sync slide through video stream. I’ve followed the link on wowza but i guess i’m unable to fetch metadata out of HLS stream.