summaryrefslogtreecommitdiff
path: root/src/YalpOutputs/YalpVlcTelnetOutput/VlcStreamer.java
blob: 568bfb8ca05e0a0af8176f6de31a40985fea9c2a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*
 * 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
 *
 * <em>Controlling Streams on a high level</em>
 *
 * @author Volker Dahnke / Manuel Traut
 *
 * @version 0.6 04-12-2005<br>
 *
 * @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);
		}
	}
}