13

我想知道如何使用 VideoDisplay 对象(在 MXML 中定义)通过 NetStream 显示从 FMS 流式传输的视频。

Flex3 文档建议这是可能的:

Video Display ... 支持通过 HTTP 的渐进式下载、来自 Flash Media Server 的流式传输以及来自 Camera 对象的流式传输。

但是,在文档的后面,我只能看到一个 attachCamera() 方法。似乎没有像旧 Video 对象那样的 attachStream() 方法。

看起来您可以使用 source 属性播放通过 HTML 提供的固定文件,但我没有看到有关如何附加 NetStream 的任何内容。

旧的Video对象似乎仍然存在,尽管它不是基于 UIComponent 并且似乎无法在 MXML 中使用。

我发现这篇博客文章展示了如何使用常规 Video 对象进行操作,但我更喜欢使用 VideoDisplay(或其他可以直接放在 MXML 中的东西)。

4

5 回答 5

15

VideoDisplay是 上的包装器VideoPlayer,而后者又Video类。不幸的是,包装器阻止您将现有的 NetStream 附加到 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

不幸的是,您只能在 Video 对象上附加 NetStream()。所以如果你想从 FMS 中获取数据,你注定要使用 em。

顺便说一下 attachCamera() 方法将本地摄像机视频发布到服务器,所以要小心;)

于 2008-09-03T21:49:59.813 回答
4

有用。

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

这将通过视频显示为您提供实时视频......问题是它不会使用现有的网络连接对象,它会创建它自己的......这就是我试图找到解决方法的原因。

于 2008-11-14T18:01:42.403 回答
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 回答
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 回答