0

Red5 を実行している 1 つのサーバーと、チャネルとして icecast2 を実行している約 5-6 の他のサーバーがあります。Red5 を使用して、icecast2 から再ストリーミングしたいと考えています。

ユーザーがコンテンツを要求すると、Red5 はそのコンテンツがどの icecast2 サーバーに属しているかを認識し、修正されたサーバーに接続してメディアを取得し、ユーザーに再ストリーミングします

私の質問は、通常、静的コンテンツをストリーミングする Red5 ですが、私の状況では、速度と帯域幅を指定して、icecast2 から動的コンテンツを再ストリーミングする必要がありますか? それは可能ですか?アイデアを得るために私が見ることができる例はありますか?

4

1 に答える 1

1

あるサーバーを別のサーバーに再ストリーミングするには、 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);
}

}
于 2012-04-26T07:08:10.647 に答える