mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-12-02 19:22:07 +01:00
082cc06b72
git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@7405 b35dd754-fafc-0310-a699-88a17e54d16e
64 lines
1.9 KiB
Java
64 lines
1.9 KiB
Java
package org.jivesoftware.jingleaudio.multi;
|
|
|
|
import org.jivesoftware.smackx.jingle.media.JingleMediaManager;
|
|
import org.jivesoftware.smackx.jingle.media.JingleMediaSession;
|
|
import org.jivesoftware.smackx.jingle.media.PayloadType;
|
|
import org.jivesoftware.smackx.jingle.nat.TransportCandidate;
|
|
|
|
import java.util.*;
|
|
|
|
/**
|
|
* Implements a MultiMediaManager using other JingleMediaManager implementations.
|
|
* It supports every Codecs that JingleMediaManagers added has.
|
|
*
|
|
* @author Thiago Camargo
|
|
*/
|
|
|
|
public class MultiMediaManager extends JingleMediaManager {
|
|
|
|
private List<JingleMediaManager> managers = new ArrayList<JingleMediaManager>();
|
|
|
|
public MultiMediaManager() {
|
|
}
|
|
|
|
public void addMediaManager(JingleMediaManager manager) {
|
|
managers.add(manager);
|
|
}
|
|
|
|
public void removeMediaManager(JingleMediaManager manager) {
|
|
managers.remove(manager);
|
|
}
|
|
|
|
/**
|
|
* Return all supported Payloads for this Manager.
|
|
*
|
|
* @return The Payload List
|
|
*/
|
|
public List<PayloadType> getPayloads() {
|
|
List<PayloadType> list = new ArrayList<PayloadType>();
|
|
for (JingleMediaManager manager : managers) {
|
|
for (PayloadType payloadType : manager.getPayloads()) {
|
|
if (!list.contains(payloadType))
|
|
list.add(payloadType);
|
|
}
|
|
}
|
|
return list;
|
|
}
|
|
|
|
/**
|
|
* Returns a new JingleMediaSession
|
|
*
|
|
* @param payloadType
|
|
* @param remote
|
|
* @param local
|
|
* @return JingleMediaSession
|
|
*/
|
|
public JingleMediaSession createMediaSession(PayloadType payloadType, final TransportCandidate remote, final TransportCandidate local) {
|
|
for (JingleMediaManager manager : managers) {
|
|
if (manager.getPayloads().contains(payloadType)) {
|
|
return manager.createMediaSession(payloadType, remote, local);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
}
|