Webcam Stream to CDN FMS

2019-08-31 02:43发布

问题:

I don't have my own Flash Media Server. I can however use the Highwinds CDN. They run FMS on their CDN. When you schedule a live event, Highwinds gives you two urls: the "server" and "stream name". Examples:

server: rtmp://fli003.am4.hwcdn.net/XXXX/definst

stream name: fli/00000-streamname?encoderuser=XXX&encoderpassword=YYY

These two urls can be pasted into the Flash Media Live Encoder application to stream the live event. The respective field names in Flash Media Live Encoder are "FMS URL" and "Stream".

I now have successfully established a connection (I think?) to the FMS server. The problem: the stream is not showing on the web, and it seems it is not submitted to the CDN.

function onStatus(e:NetStatusEvent):void {

trace(e.info.code);

    switch(e.info.code) {

      case "NetConnection.Connect.Success":
        var ns:NetStream = new NetStream(conn);

        ns.addEventListener(NetStatusEvent.NET_STATUS, onStatus);

        var camera = Camera.getCamera();
            camera.setLoopback(true);
            camera.setQuality( 0, 100 );
            camera.setMode(640, 480, 25)
        var mic = Microphone.getMicrophone();

        if (camera != null){
            myVid.attachCamera(camera);
            ns.attachCamera(camera);
//            ns.play();
        }
        if (mic != null) {
            ns.attachAudio(mic);
        }

        ns.publish("fli/00000-streamname?encoderuser=XXX&encoderpassword=YYY", "live");
        break;
        //...
    }
}

var conn:NetConnection = new NetConnection();



conn.addEventListener(NetStatusEvent.NET_STATUS, onStatus);
conn.connect("rtmp://fli003.am4.hwcdn.net/XXXX/_definst_");


//var counter:int = 0;
//conn.onBWDone = function(kbitDown:Number, deltaDown:Number, deltaTime:Number, latency:Number){ };
NetConnection.prototype.onBWDone = function(p_bw) {
   //trace("onBWDone: "+p_bw);
}
NetConnection.prototype.onBWCheck = function() {
   //return ++counter;
}

The smil file is there, but I suspect that no data arrives at the server. The player is only showing a loading animation.

And I now get an additional

NetStream.Failed NetStream.InvalidArg NetStream.InvalidArg after successfully connecting. No idea where that error came from.

回答1:

check the NetStraem.publish() reference:

//...
conn = new NetConnection();
conn.addEventListener(NetStatusEvent.NET_STATUS, onStatus);
conn.connect('rtmp://fli003.am4.hwcdn.net/XXXX/definst');
//...
private function onStatus(e:NetStatusEvent):void {
    switch(e.info.code) {
        case "NetConnection.Connect.Success":
        ns = new NetStream(conn);
        ns.attachCamera(camera);
        ns.publish("fli/00000-name?encoderuser=XXX&encoderpassword=YYY", "live");
        break;
        //...
    }
}