Frage

Ich frage mich, wie ich ein VideoDisplay-Objekt (in MXML definiert) verwenden kann, um von FMS über einen NetStream gestreamte Videos anzuzeigen.

Der Flex3-Dokumente schlagen vor, dass dies möglich ist:

Die Videoanzeige ...unterstützt progressives Herunterladen über HTTP, Streaming vom Flash Media Server und Streaming von einem Kameraobjekt.

Später in den Dokumenten kann ich jedoch nur eine Methode attachmentCamera() sehen.Es scheint keine attachmentStream()-Methode wie beim alten Video-Objekt zu geben.

Es sieht so aus, als ob Sie mit der Eigenschaft „source“ eine über HTML bereitgestellte feste Datei abspielen können, aber ich sehe nichts darüber, wie man einen NetStream anfügt.

Das alte Video Das Objekt scheint immer noch zu existieren, obwohl es nicht auf UIComponent basiert und in MXML nicht verwendbar zu sein scheint.

ich fand dieser Blogbeitrag Das zeigt, wie man es mit einem normalen Videoobjekt macht, aber ich würde lieber VideoDisplay verwenden (oder etwas anderes, das direkt in MXML eingefügt werden kann).

War es hilfreich?

Lösung

Leider können Sie NetStream() nur an Videoobjekte anhängen.Sie sind also dazu verdammt, sie zu verwenden, wenn Sie Daten von FMS erhalten möchten.

Übrigens die Methode attachmentCamera() veröffentlicht lokales Kameravideo an den Server, seien Sie also vorsichtig ;)

Andere Tipps

VideoDisplay ist ein Wrapper auf VideoPlayer, was wiederum Ist A Video Unterklasse.Leider verhindert der Wrapper, dass Sie einen vorhandenen NetStream an das Videoobjekt anhängen können.

Ein Verweis auf diese Komponente wird jedoch im enthalten mx_internal Namespace, daher sollte Folgendes ausreichen:

videoDisplay.mx_internal::videoPlayer.attachNetStream(incomingStream);
videoDisplay.mx_internal::videoPlayer.visible = true;

(Sie müssen die importieren mx.core.mx_internal Namensraum)

Es klappt.

mx:VideoDisplay live="true" autoPlay="true" source="rtmp://server.com/appname/streamname" />

Dadurch erhalten Sie Live-Videos über ein Videodisplay ...Das Problem besteht darin, dass kein vorhandenes Netzverbindungsobjekt verwendet wird, sondern ein eigenes erstellt wird ...Dafür versuche ich eine Lösung zu finden.

Hier ein Link zu einem Beispiel für die Verwendung von Videos:http://blog.flexexamples.com/2008/03/01/displaying-a-video-in-flex-using-the-netconnection-netstream-and-video-classes/

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="vertical"
    verticalAlign="middle"
    backgroundColor="white"
    creationComplete="init();">

<mx:Script>
<![CDATA[
    import mx.utils.ObjectUtil;

    private var nc:NetConnection;
    private var ns:NetStream;
    private var video:Video;
    private var meta:Object;

    private function init():void {
    var nsClient:Object = {};
    nsClient.onMetaData = ns_onMetaData;
    nsClient.onCuePoint = ns_onCuePoint;

    nc = new NetConnection();
    nc.connect(null);

    ns = new NetStream(nc);
    ns.play("http://www.helpexamples.com/flash/video/cuepoints.flv");
    ns.client = nsClient;

    video = new Video();
    video.attachNetStream(ns);
    uic.addChild(video);
    }

    private function ns_onMetaData(item:Object):void {
    trace("meta");
    meta = item;
    // Resize Video object to same size as meta data.
    video.width = item.width;
    video.height = item.height;
    // Resize UIComponent to same size as Video object.
    uic.width = video.width;
    uic.height = video.height;
    panel.title = "framerate: " + item.framerate;
    panel.visible = true;
    trace(ObjectUtil.toString(item));
    }

    private function ns_onCuePoint(item:Object):void {
    trace("cue");
    }
]]>
</mx:Script>

<mx:Panel id="panel" visible="false">
    <mx:UIComponent id="uic" />
    <mx:ControlBar>
    <mx:Button label="Play/Pause" click="ns.togglePause();" />
    <mx:Button label="Rewind" click="ns.seek(0); ns.pause();" />
    </mx:ControlBar>
</mx:Panel>
</mx:Application>

Ich habe Beispielcode gesehen, in dem so etwas funktioniert:

// Connect to the video stream in question.
var stream:NetStream = new NetStream( chatNC );
stream.addEventListener( NetStatusEvent.NET_STATUS, handleStreamStatus );
stream.addEventListener( IOErrorEvent.IO_ERROR, handleIOError );

// Build the video player on the UI.
var video:Video = new Video(246, 189);
var uiComp:UIComponent = new UIComponent();
uiComp.addChild( video );
uiComp.width = 246;
uiComp.height = 189;
stream.play( streamName );
video.attachNetStream( stream );
video.smoothing = true;
video.width = 246;
video.height = 189;
view.videoPlayerPanel.removeAllChildren();
view.videoPlayerPanel.addChild( uiComp );

Aber ich schaffe es selbst nicht, es zum Laufen zu bringen.Ich werde es später hier posten, wenn ich es herausfinden kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top