I have Adobe Media Server 5 (starter) up and running on Windows 7
I have a HelloWorld
application on the server, and a client flash file that connects to it.
Now I want to modify this application to stream a video that I've placed on the server
To make that happen, I wrote some code, which I've pasted below.
The important bits are under the netConnectionHandler
function.
The NetStream
I've posted now gives me a StreamNotFound
error
The path to my video is
C:\Program Files\Adobe\Adobe Media Server 5\applications\HelloWorld\sample.mp4
The nc.connect
server path is rtmp://localhost/HelloWorld
I'm following these official instructions to do this, but I can't get this to work.
When do the ns.play
as below, I get a SteamNotFound
error. However, if I were to enter ns.play("sample")
I get:
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;
}
}
}
}
Console output:
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
Your issue is likely the format of your url.
ns.play("rtmp://localhost/HelloWorld/media/sample.flv");
This tells Adobe Media Server to load an instance of the HelloWorld application named media
In Adobe media server, you don't pass in any paths for media when connecting. It looks in the streams folder for the media passed. You can also use the Application.xml file (or the main config file) to add other directories to look in for the media.
The easiest way to make this work, is to rename your media folder to "streams". Then connect like so:
ns.play("rtmp://localhost/HelloWorld/sample.flv");
Leaving off the .flv should also work just fine. You may need to make a sub-folder in the streams folder called _definst_
and put your media inside of that.
If it still doesn't work, you likely have an issue with your Application.xml.
Try creating an Application.xml file in your application directory. Use the following:
<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>