/*
* Copyright (c) 2006 Manuel Traut and Volker Dahnke
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors: Manuel Traut and Volker Dahnke
*/
package YalpOutputs.YalpVlcTelnetOutput;
import YalpInterfaces.*;
import java.io.*;
import java.util.LinkedList;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
/*
*
* Class VlcStreamer
*
* Controlling Streams on a high level
*
* @author Volker Dahnke / Manuel Traut
*
* @version 0.6 04-12-2005
*
* @see InitServer
*/
public class VlcStreamer {
private static ORB orb;
private static POA poa;
private static YalpOutputPluginImpl streamer;
private static OutputPluginInterface outputPlugin;
private static ServerControlInterface srvCon;
private static PluginInfo pluginInfo;
/*
* starts a vlc player in a new process
*
* @param serverIP
* where vlcStreamer is running
* @param startport
* first port used for streaming
* @param vlcCmd
* path and name of vlc player executable
* @param args
* from cmd line
*/
public VlcStreamer(String serverIP, int startport, String vlcCmd,
String[] argv) {
pluginInfo = new PluginInfo();
pluginInfo.name = "VLC Telnet Streamer";
pluginInfo.description = "creates streams via VLC players telnet interface";
pluginInfo.type = PluginType.OUTPUT_PLUGIN;
pluginInfo.supportedTypes = new MediaType[0];
pluginInfo.access = new AccessInfo();
pluginInfo.access.name = "stream provided by vlc player";
pluginInfo.access.description = "streams can be displayed with vlc player";
pluginInfo.access.executable = "vlc";
pluginInfo.access.params = "";
pluginInfo.access.type = AccessType.STREAM;
try {
this.orb = ORB.init(argv, null);
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
} catch(Exception e) {
/* t.b.d. error handling */
System.out.println("couldn't host plugin implementation");
}
try {
poa.the_POAManager().activate();
} catch(org.omg.PortableServer.POAManagerPackage.AdapterInactive e) {
/* t.b.d. error handling */
System.out.println("poa inactive");
}
/*
YalpError error = new YalpError();
error.msg = "";
error.descr = "";
error.code = YalpErrorCode.OK;
error.level= YalpErrorLevel.ERROR_LEVEL_INFO;
*/
YalpErrorHolder err = new YalpErrorHolder(/*error*/);
try {
/* only start vlc player if it isn't currently running */
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
String name = "YALP_Server";
srvCon = ServerControlInterfaceHelper.narrow(ncRef.resolve_str(name));
} catch (Exception e) {
System.out.println("Couldn't connect to YALP Server");
System.exit(0);
}
streamer = new YalpOutputPluginImpl();
streamer.setORB(orb);
try {
poa.activate_object(streamer);
org.omg.CORBA.Object ref = poa.servant_to_reference(streamer);
outputPlugin = OutputPluginInterfaceHelper.narrow(ref);
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
String name = "YALP_Vlc_Telnet_Streamer_Output";
NameComponent path[] = ncRef.to_name(name);
ncRef.rebind(path, outputPlugin);
PluginInfoHolder tmp = new PluginInfoHolder(pluginInfo);
srvCon.ping(err);
System.out.println(err.value.descr);
srvCon.registerOutputPlugin(outputPlugin, tmp, err );
pluginInfo = tmp.value;
if(err.value.code != YalpErrorCode.OK)
System.out.println("registring outputplugin failed");
else
System.out.println("output plugin registered");
orb.run();
} catch (Exception e) {
System.out.println("binding plugin failed 1");
e.printStackTrace();
System.exit(0);
}
}
}