2012-04-10 2 views
0

У меня есть 1 сервер работает Red5 и около 5-6 другого сервера под управлением icecast2 в качестве канала Теперь я хочу, чтобы с помощью Red5 повторно потокового icecast2Restreaming с red5

Когда запрос пользователя содержание, Red5 будет знать, что содержимое принадлежит к серверу icecast2, и он подключится к исправленному серверу, чтобы получить медиа и повторный поток для пользователя.

Мой вопрос, как правило, в Red5 потоковой передачи статического содержимого, но в моей ситуации я должен перезапустить динамический контент от icecast2 с указанием скорости и пропускной способности? Это возможно? Есть ли какой-нибудь пример, на который я мог бы взглянуть, чтобы понять эту идею?

ответ

1

Для restreaming одного сервера к другому использованию сервера StreamingProxy

import java.util.HashMap; 
import java.util.Map; 

import org.red5.server.adapter.MultiThreadedApplicationAdapter; 
import org.red5.server.api.IBasicScope; 
import org.red5.server.api.IConnection; 
import org.red5.server.api.IScope; 
import org.red5.server.api.stream.IBroadcastStream; 
import org.red5.server.stream.IBroadcastScope; 
import org.red5.server.stream.StreamingProxy; 

public class Application extends MultiThreadedApplicationAdapter implements IStreamListener { 

private Map<String, StreamingProxy> streamingProxyMap = new HashMap<String, StreamingProxy>(); 

public IBroadcastScope getBroadcastScope(IScope scope, String name) { 
    IBasicScope basicScope = scope.getBasicScope(IBroadcastScope.TYPE, 
      name); 
    if (!(basicScope instanceof IBroadcastScope)) { 
     return null; 
    } else { 
     return (IBroadcastScope) basicScope; 
    } 
} 

/** {@inheritDoc} */ 
@Override 
public boolean connect(IConnection conn, IScope scope, Object[] params) { 
    return true; 
} 

public void streamBroadcastStart(IBroadcastStream stream) 
{ 
    IScope scope = stream.getScope(); 
    IBroadcastScope bsScope = getBroadcastScope(scope, stream.getPublishedName()); 
    StreamingProxy proxy = new StreamingProxy(); 
    proxy.setHost("live.justin.tv"); 
    proxy.setApp("app"); 
    proxy.setPort(1935); 
    proxy.init(); 
    bsScope.subscribe(proxy, null); 
    proxy.start("MY_STRING", StreamingProxy.LIVE, null); 
    streamingProxyMap.put(stream.getPublishedName(), proxy); 
    stream.addStreamListener(this); 
} 

public void packetReceived(IBroadcastStream stream, IStreamPacket packet) 
{ 
    RTMPMessage m = RTMPMessage.build((IRTMPEvent) packet,packet.getTimestamp()); 
    streamer.pushMessage(null, m); 
}  

synchronized public void streamBroadcastClose(IBroadcastStream stream) { 
    StreamingProxy proxy = 
      streamingProxyMap.get(stream.getPublishedName()); 
    if (proxy != null) { 
      proxy.stop(); 
      IScope scope = stream.getScope(); 
      IBroadcastScope bsScope = getBroadcastScope(scope, stream.getPublishedName()); 
      if (bsScope != null) { 
       bsScope.unsubscribe(proxy); 
     } 
    } 
} 

/** {@inheritDoc} */ 
@Override 
public void disconnect(IConnection conn, IScope scope) { 
    super.disconnect(conn, scope); 
} 

} 
+0

У вас есть новая версия этого –

+0

@JuanDiego У меня нет –

+0

Если я хочу restream выбранного потока по желанию Это должно работать таким же образом в любом методе? –