13

VideoDisplayオブジェクト(MXMLで定義)を使用して、NetStreamを介してFMSからストリーミングされたビデオを表示する方法を知りたいです。

Flex3ドキュメントは、これが可能であることを示唆しています。

ビデオディスプレイ...は、HTTPを介したプログレッシブダウンロード、Flash Media Serverからのストリーミング、およびCameraオブジェクトからのストリーミングをサポートします。

ただし、ドキュメントの後半で確認できるのは、attachCamera()メソッドだけです。古いVideoオブジェクトのようなattachStream()メソッドはないようです。

sourceプロパティを使用してHTML経由で提供される固定ファイルを再生できるように見えますが、NetStreamをアタッチする方法については何もわかりません。

古いVideoオブジェクトはまだ存在しているようですが、UIComponentに基づいておらず、MXMLで使用できるようには見えません。

通常のVideoオブジェクトでそれを行う方法を示すこのブログ投稿を見つけましたが、VideoDisplay(またはMXMLに直接配置できる他の何か)を使用することを強く望んでいます。

4

5 に答える 5

15

VideoDisplay、サブクラスVideoPlayerである のラッパーです。残念ながら、ラッパーは、既存の NetStream を Video オブジェクトにアタッチすることを妨げます。Video

ただし、そのコンポーネントへの参照はmx_internal名前空間に保持されるため、次のようにしてください。

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

mx.core.mx_internal(名前空間をインポートする必要があります)

于 2010-06-25T09:51:21.137 に答える
6

残念ながら、NetStream() をアタッチできるのは Video オブジェクトだけです。したがって、FMS からデータを取得したい場合は、em を使用する運命にあります。

ちなみに attachCamera() メソッドローカルカメラの映像をサーバーに公開するので気をつけてください;)

于 2008-09-03T21:49:59.813 に答える
4

ビデオの使用方法の例へのリンクは次のとおりです: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>
于 2010-08-15T21:28:26.040 に答える
4

できます。

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

これにより、ビデオディスプレイを介してライブビデオが提供されます...問題は、既存のnetconnectionオブジェクトを使用せず、独自のものを作成することです...これは、私が回避策を見つけようとしているものです.

于 2008-11-14T18:01:42.403 に答える
2

このようなものが機能するサンプルコードを見てきました:

// 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 );

しかし、私は実際にそれを自分で機能させることはできません。後でここに投稿します。

于 2009-04-17T22:22:23.183 に答える