This repository was archived by the owner on Mar 21, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 29
Expand file tree
/
Copy pathJingleStream.java
More file actions
109 lines (98 loc) · 2.88 KB
/
JingleStream.java
File metadata and controls
109 lines (98 loc) · 2.88 KB
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
package com.xonami.javaBells;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jitsi.service.neomedia.AudioMediaStream;
import org.jitsi.service.neomedia.MediaStream;
import org.jitsi.service.neomedia.VideoMediaStream;
import org.jitsi.service.neomedia.device.MediaDevice;
import org.jitsi.util.event.VideoEvent;
import org.jitsi.util.event.VideoListener;
public class JingleStream {
private final String name;
private final MediaStream mediaStream;
// private final JingleStreamManager jingleStreamManager;
private JPanel visualComponent;
public JingleStream(String name, MediaStream mediaStream, JingleStreamManager jingleStreamManager) {
this.name = name;
this.mediaStream = mediaStream;
// this.jingleStreamManager = jingleStreamManager;
}
public String getName() {
return name;
}
/** quick and easy way to show the feed */
public void quickShow(MediaDevice audioDevice) {
JPanel p = getVisualComponent();
if( p != null ) {
final JFrame f = new JFrame( name );
f.getContentPane().add(p);
f.pack();
f.setResizable(false);
f.setVisible(true);
f.toFront();
p.addContainerListener( new ContainerListener() {
@Override
public void componentAdded(ContainerEvent e) {
f.pack();
}
@Override
public void componentRemoved(ContainerEvent e) {
f.pack();
}
} );
}
startAudio(audioDevice);
}
/** starts the audio if this is an audio stream. */
public void startAudio(MediaDevice mediaDevice) {
if( mediaStream instanceof AudioMediaStream ) {
AudioMediaStream ams = ((AudioMediaStream) mediaStream);
ams.setDevice(mediaDevice);
ams.start();
}
}
/** returns a visual component for this stream or null if this is not a video stream. */
public JPanel getVisualComponent() {
if( visualComponent != null )
return visualComponent;
if( mediaStream instanceof VideoMediaStream ) {
visualComponent = new JPanel( new BorderLayout() );
VideoMediaStream vms = ((VideoMediaStream) mediaStream);
vms.addVideoListener( new VideoListener() {
@Override
public void videoAdded(VideoEvent event) {
videoUpdate(event);
}
@Override
public void videoRemoved(VideoEvent event) {
videoUpdate(event);
}
@Override
public void videoUpdate(VideoEvent event) {
updateVisualComponent();
}
} );
updateVisualComponent();
return visualComponent;
} else {
return null;
}
}
private void updateVisualComponent() {
visualComponent.removeAll();
VideoMediaStream vms = ((VideoMediaStream) mediaStream);
for( Component c : vms.getVisualComponents() ) {
visualComponent.add(c); //only the first one
break;
}
visualComponent.revalidate();
}
public void shutdown() {
// mediaStream.stop();
mediaStream.close();
}
}