2012-05-24 2 views
3

Я пытаюсь реализовать библиотеку от http://www.aftek.com/afteklab/aftek-RTMP-library.shtml , чтобы транслировать видео в реальном времени с сервера red5.RTMP android aftek

На сервере я использую 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);  
} 

} 

я всегда получать NetStream.Play.StreamNotFound в функции onStatus.

Спасибо

ответ

0

Поток не существует, правильно. Но почему? Вероятно, одна или две причины: вы не создали прямой трансляционный поток и 2), потому что используете неправильный масштаб. Если вы не настроите его по-разному вручную (что маловероятно), используйте «живой» масштаб вещателя, который находится в/в реальном времени.

Таким образом, опубликуйте в rtmp: //216.224.181.197/live/red5StreamDemo и подписаться на тот же самый mrl, в этом примере rtmp: //216.224.181.197/live/red5StreamDemo. ПРИМЕЧАНИЕ. Для этого вам необходимо создать «живой» поток и передать его на ваш сервер RED5. Вы можете использовать avconv (aka ffmpeg) для создания канала rtmp.

1

Вы NetStream.Play.StreamNotFound ошибки becouse такого потока оленьей кожа существует на применении RED5.

Я сделал быстрый тест 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?

+0

Эта библиотека действительно работает, я не нашел ни одного учебника по этому –

+0

Привет, Габриэль. В какой библиотеке вы имели в виду? Я написал просто простой чистый код sa3. – terbooter

Смежные вопросы