3

http://www.aftek.com/afteklab/aftek-RTMP-library.shtmlからライブラリを実装して 、red5 サーバーからライブ ビデオをストリーミングしようとしています。

サーバー上で simpleBroadcaster を使用しており、それを Android フォンにストリーミングしたいと考えています。

私のコード:

package com.cu.reader;

import java.nio.channels.FileChannel;
import java.util.Map;
import com.al.rtmp.client.RtmpClient;
import com.al.rtmp.client.RtmpStream;
import com.al.rtmp.client.RtmpStreamFactory;
import com.al.rtmp.client.data.MetaData;
import com.al.rtmp.client.data.RTMPData;
import com.al.rtmp.client.data.VideoCodec;
import com.al.rtmp.message.Metadata;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class StreamreaderActivity extends Activity implements RtmpClient {
     RtmpStream stream = null;
     Boolean connected = false;
 String server = "rtmp://216.224.181.197/oflaDemo/";
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    stream = RtmpStreamFactory.getRtmpStream();
    stream.setClient(this);
    stream.connect(server);
}
@Override
public void streamCreated() {
    Log.i("stream","Connected!");       

    connected = true;
    stream.setPlayName("red5StreamDemo");
    stream.play();

}
@Override
public byte[] getWriteData(int length) {
    // TODO Auto-generated method stub
    return null;
}
@Override
public void invoke(String arg0, Object... arg1) {
    // TODO Auto-generated method stub
;   
}
@Override
public void onDataReceived(RTMPData rtmpData) {
    MetaData metaData = rtmpData.getMetaData();
    VideoCodec vc = metaData.getVideoCodec();
}
@Override
public void onError(Exception ex) {
    Log.e("ClientException", " Some exception occurred." + ex.getMessage());
    ex.printStackTrace();
}
@Override
public void onMetaDataReceived(Map map) {
    Log.i("code","METADATA:" + map);        

}
@Override
public void onResult(String method, Object... arg1) {
    Log.i("result","METADATA:" + method);       

}
@Override
public void onStatus(String code) {
    Log.i("code",code);     
}

}

私は常に onStatus 関数で NetStream.Play.StreamNotFound を受け取っています。

ありがとうございました

4

2 に答える 2

1

そのようなストリームが red5 アプリケーションに存在しないため、NetStream.Play.StreamNotFound エラーが発生します。

チェックするために簡単なas3テストを作成しました:

package {

import flash.display.Sprite;
import flash.events.AsyncErrorEvent;
import flash.events.IOErrorEvent;
import flash.events.NetStatusEvent;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;

public class LearnWowzaClient extends Sprite {

    private var nc:NetConnection;
    private var video:Video = new Video();

    public function LearnWowzaClient() {

        nc = new NetConnection();
        nc.client = this;
        nc.addEventListener(NetStatusEvent.NET_STATUS, onNet);
        nc.connect("rtmp://216.224.181.197/oflaDemo/");
    }

    private function onNet(event:NetStatusEvent):void {
        trace(event);
        trace(event.info.code);
        switch (event.info.code) {
            case "NetConnection.Connect.Success":
                tryPlayStream();
                break;
        }
    }

    private function tryPlayStream():void {
        trace("playStream");
        var ns:NetStream = new NetStream(nc);
        ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
        ns.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
        ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);

        ns.play("red5StreamDemo");
        video.attachNetStream(ns);
    }

    public function onBWCheck(parameter:Object = null):void {
        trace("onBWCheck p=" + parameter);
    }

    public function onBWDone(parameter:Object = null):void {
        trace("onBWDone p=" + parameter);
    }

    private function onIOError(event:IOErrorEvent):void {
        trace("onIOError");
    }

    private function onAsyncError(event:AsyncErrorEvent):void {
        trace("onAsyncError");
    }

    private function onNetStatus(event:NetStatusEvent):void {
        trace("onNetStatus   ", event.info.code);
    }
}
}

NetStream.Play.StreamNotFound エラーも発生します。red5 アプリケーション コードを表示できますか?

于 2012-11-12T09:30:08.540 に答える
0

ストリームが存在しません。正しいです。しかし、なぜ?おそらく 1 つまたは 2 つの理由が考えられます。ライブ ブロードキャスト ストリームを作成していないことと、2) 間違ったスコープを使用しているためです。手動で別の設定をしない限り (可能性は低い)、/live にある「ライブ」ブロードキャスター スコープを使用します。

したがって、rtmp://216.224.181.197/live/red5StreamDemo に公開し、まったく同じ mrl (この例では rtmp://216.224.181.197/live/red5StreamDemo) を購読します。注: これを機能させるには、「ライブ」ストリームを作成して RED5 サーバーにフィードする必要があります。avconv (別名 ffmpeg) を使用して rtmp フィードを作成できます。

于 2013-05-08T21:26:24.373 に答える