Воспроизведение видео на локальном сервере Adobe Media Server
У меня есть Adobe Media Server 5 (начальный) и работает на Windows 7
у меня есть HelloWorld
приложение на сервере и клиентский флэш-файл, который подключается к нему.
Теперь я хочу изменить это приложение для потоковой передачи видео, которое я разместил на сервере
Чтобы это произошло, я написал код, который вставил ниже. Важные биты находятся под netConnectionHandler
функция.
NetStream
Я отправил сейчас дает мне StreamNotFound
ошибка
Путь к моему видео
C:\Program Files\Adobe\Adobe Media Server 5\applications\HelloWorld\sample.mp4
nc.connect
путь к серверу rtmp://localhost/HelloWorld
Я следую этим официальным инструкциям, но не могу заставить это работать.
Когда делать 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
1 ответ
Ваша проблема, вероятно, формат вашего URL.
ns.play("rtmp://localhost/HelloWorld/media/sample.flv");
Это говорит Adobe Media Server, чтобы загрузить экземпляр приложения HelloWorld с именем media
На медиасервере Adobe вы не указываете пути для мультимедиа при подключении. Это выглядит в папке потоков для переданных носителей. Вы также можете использовать файл Application.xml (или основной файл конфигурации), чтобы добавить другие каталоги для поиска носителя.
Самый простой способ сделать это - переименовать папку мультимедиа в "streams". Затем подключите так:
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>