2013-07-03 2 views
3

У меня есть Adobe Media Server, 5 (стартер) и работает на Windows 7Воспроизведение видео на локальном Adobe Media Server

У меня есть HelloWorld приложение на сервере, а также флэш-файл клиента, который подключается к нему.

Теперь я хочу изменить это приложение для потоковой передачи видео, которое я разместил на сервере

Чтобы это произошло, я написал код, который я вставил ниже. Важные биты находятся под функцией netConnectionHandler.

NetStream Я отправил теперь дает мне ошибку StreamNotFound

Путь к моему видео является

C:\Program Files\Adobe\Adobe Media Server 5\applications\HelloWorld\sample.mp4

Путь nc.connect сервера rtmp://localhost/HelloWorld

Я следую these official instructions для этого, но я не могу заставить это работать.

Когда делаете ns.play, как показано ниже, я получаю ошибку SteamNotFound. Однако, если я войду ns.play("sample") я получаю:

ns event.info.code: NetStream.Play.Start 
ReferenceError: Error #1069: Property onMetaData not found on flash.net.NetStream and there is no default value. 

package { 
    import flash.display.MovieClip; 
    import flash.net.Responder; 
    import flash.net.NetConnection; 
    import flash.events.NetStatusEvent; 
    import flash.events.MouseEvent; 
    import flash.net.URLRequest; 
    import flash.net.URLLoader; 
    import flash.events.Event; 
    import flash.net.NetStream; 
    import flash.media.Video; 


    public class HelloWorld extends MovieClip { 
     private var nc:NetConnection; 
     private var myResponder:Responder = new Responder(onReply); 
     private var server:String; 



     public function HelloWorld(){ 
      textLbl.text = ""; 
      connectBtn.label = "Connect"; 
      connectBtn.addEventListener(MouseEvent.CLICK, connectHandler); 
     } 

     public function connectHandler(event:MouseEvent):void{ 
      if(connectBtn.label=="Connect") { 
       var myLoader:URLLoader = new URLLoader(); 
       myLoader.load(new URLRequest("config.xml")); 
       myLoader.addEventListener(Event.COMPLETE, function(e:Event):void{ 
       var serviceXML = new XML(e.target.data);      
       trace("Connecting..."); 
       nc = new NetConnection(); 
       nc.addEventListener(NetStatusEvent.NET_STATUS,netConnectionHandler); 
       //Connect to the server 
       nc.connect(serviceXML.ServerPath.text());//Which is "rtmp://localhost/HelloWorld" 

       //Call the server's client function 'serverHelloMsg' in HellowWorld.asc 
       nc.call("serverHelloMsg",myResponder,"World"); 
       connectBtn.label="Disconnect"; 
       }); 

      }else{ 
       trace("Disconnecting..."); 
       //Close the connection. 
       nc.close(); 
       connectBtn.label = "Connect"; 
       textLbl.text = ""; 
      } 
     } 

     private function onReply(result:Object):void{ 
      trace("onReply recieved value: " + result); 
      textLbl.text = String(result); 
     } 

     private function showXML(e:Event):void{ 
      XML.ignoreWhitespace=true; 
      var config:XML = new XML(e.target.data); 
      trace(config.serverpath.text()); 
      server = config.serverpath.text(); 

     } 
     public function netStatusHandler(event:NetStatusEvent):void { 
      trace("ns connected is: " + nc.connected); 
      trace("ns event.info.level: " + event.info.level); 
      trace("ns event.info.code: " + event.info.code); 
     } 

     public function netConnectionHandler(event:NetStatusEvent):void { 
      trace("connected is: " + nc.connected); 
      trace("event.info.level: " + event.info.level); 
      trace("event.info.code: " + event.info.code); 
      switch (event.info.code) 
      { 
       case "NetConnection.Connect.Success": 
        var v:Video = new Video(); 
        v.width=200; 
        v.height=200; 
        v.x=0; 
        v.y=0; 
        v.visible=true; 
        v.opaqueBackground=false; 
        stage.addChild(v); 

        var ns:NetStream = new NetStream(nc); 
        ns.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler); 
        v.attachNetStream(ns); 
        ns.play("rtmp://localhost/HelloWorld/sample.flv"); 

        break; 
       case "NetConnection.Connect.Rejected": 
        trace ("Oops! the connection was rejected"); 
        // try to connect again 
        break; 
       case "NetConnection.Connect.Failed": 
        trace("The server may be down or unreachable"); 
        // display a message for the user 
        break; 
       case "NetConnection.Connect.Closed": 
        trace("The connection was closed successfully - goodbye"); 
        // display a reconnect button 
        break; 
      } 
     } 
    } 


} 

Консоль вывода:

Connecting... 
connected is: true 
event.info.level: status 
event.info.code: NetConnection.Connect.Success 
onReply recieved value: Hello, World! 
ns connected is: true 
ns event.info.level: error 
ns event.info.code: NetStream.Play.StreamNotFound 
ns connected is: true 
ns event.info.level: status 
ns event.info.code: NetStream.Play.Stop 
+0

Вы пытались использовать приложение VOD? снимите медиафайл. – BadFeelingAboutThis

+0

Это единственный возможный способ потокового видео с сервера? Цель состоит в том, чтобы сделать мое собственное приложение – Houseman

+0

Это не единственный способ, но вы можете использовать его в качестве отправной точки и изменить его, как хотите. Вероятно, ваша проблема связана с использованием пути «media» в вашем соединении. ваш код/​​настройки приложения указывает, где искать носители, а не ваше соединение. Ваше соединение должно быть: 'rtmp: // localhost/helloworld/sample' – BadFeelingAboutThis

ответ

1

Ваш вопрос, вероятно, формат вашей ссылке.

ns.play("rtmp://localhost/HelloWorld/media/sample.flv"); 

Это говорит Adobe Media Server для загрузки экземпляра приложения HelloWorld имени media В сервере Adobe СМИ, не проходят ни в каких путях для СМИ при подключении. Он просматривается в папке потоков для переданного носителя. Вы также можете использовать файл Application.xml (или основной файл конфигурации), чтобы добавить другие каталоги для поиска носителя.

Самый простой способ сделать это - переименовать вашу медиа-папку в «потоки». Затем подключитесь так:

ns.play("rtmp://localhost/HelloWorld/sample.flv"); 

Оставляя также .flv, также следует работать нормально. Возможно, вам понадобится сделать подпапку в папке с потоками, которая называется _definst_, и помещать ее в нее.

Если он все еще не работает, у вас наверняка возникнет проблема с вашим Application.xml.


Попробуйте создать файл Application.xml в каталоге приложения. Используйте следующее:

<Application> 
    <StreamManager> 
     <VirtualDirectory> 
      <!-- Specifies application specific virtual directory mapping for recorded 
      streams. --> 
      <Streams>/;C:\Program Files\Adobe\Adobe Media Server 5\applications\HelloWorld\</Streams> 
     </VirtualDirectory> 
    </StreamManager> 
</Application> 
+0

Я по-прежнему получаю ошибки «StreamNotFound» при смене папки, использовании нового пути и даже в папке '_definst_'. У меня нет никакого файла ** Application.xml **. – Houseman

+0

Я отредактировал мой вопрос, чтобы добавить новую информацию прямо перед «перерывом кода» – Houseman

+0

обновил мой ответ, как сделать файл application.xml – BadFeelingAboutThis

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