【问题标题】:Playing a video with flex, AS3使用 flex、AS3 播放视频
【发布时间】:2016-03-28 05:07:49
【问题描述】:

我目前正在尝试在 flex 上制作游戏,我遇到的一个问题是如何在开始时播放短动画。这是我目前所拥有的:

游戏.mxml

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    name="Game"
    backgroundColor="#000000"
    horizontalAlign="center"
    creationComplete="Init();"
    enterFrame="UpdateFrame();"
    paddingLeft="0"
    paddingTop="0"
    paddingBottom="0"
    paddingRight="0"
    width="800" height="600">

  <mx:Script>
  <![CDATA[
    include "Game.as";
  ]]>
  </mx:Script>

  <mx:Canvas id="gamePanel" x="0" y="0" width="100%" height="100%" mouseDown="MouseDown(event)" mouseUp="MouseUp(event)" mouseMove="MouseMoved(event)"/>
</mx:Application>

和 Game.as

import flash.display.*; 
import flash.events.*;
import flash.external.ExternalInterface; 
import mx.events.*;
import mx.controls.*;

[Embed(source="MyVideoClip.flv")] private var MyVideoClip:Class;

public function Init():void
{   
    var MyVideo:Video = new Video(800, 600);
    addChild(MyVideo);
    var qNetConnection:NetConnection = new NetConnection();
    qNetConnection.connect(null);
    var qNetStream:NetStream = new NetStream(qNetConnection);
    MyVideo.attachNetStream(qNetStream);
    qNetStream.client = new Object();
    qNetStream.play(MyVideoClip);
}

private function UpdateFrame():void
{

}

private function MouseDown(event:MouseEvent):void   
{   

}   

private function MouseUp(event:MouseEvent):void     
{

}

private function MouseMoved(event:MouseEvent):void  
{

}

我对 Flex 和 AS3 还很陌生,所以大部分代码都是从网络教程中抄袭而来的。每当我尝试编译它时,我都会得到:'错误:'MyVideoClip.flv' 没有可识别的扩展名,并且未提供 mimeType。错误:无法转码“MyVideoClip.flv”

如果我在 play() 函数中删除“嵌入”行并将 MyVideoClip 替换为“MyVideoClip.flv”,则代码编译不会出错,但是当我打开 SWF 时,我得到的只是黑屏。我做错了什么?

提前致谢!!

【问题讨论】:

标签: actionscript-3 flash apache-flex video


【解决方案1】:

尝试设置 mime-type,例如:

[Embed(source = "MyVideoClip.flv", mimeType = "application/octet-stream")]

【讨论】:

  • .flv 位于何处?以上假设它与文档类位于同一目录中。
  • 它与 MXML 和 AS 文件位于同一目录。 “文档类”是什么意思?
  • @VladimirShevyakov,文档类是附加到您的 FLA 文档(项目文件)的 .as 文件。
  • @RobertLombardo,我没有使用 flash builder,我使用的是 flex SDK,所以我的项目文件夹有:Game.mxml、Game.as、MyVideoClip.flv 和 make.bat(带有D:\Vladimir\flex_sdk_4.6\bin\mxmlc.exe Game.mxml. 我没有 FLA 文件....
【解决方案2】:

您将视频文件(其字节)嵌入到输出 SWF 中。所以现在NetStream 必须从字节源播放。只需将byteArray 设置为等于new MyVideoClip(); 并附加到NetStream

试试这个……

[Embed(source="MyVideoClip.flv", mimeType="application/octet-stream")] private var MyVideoClip:Class; //# embed the FLV's bytes

public var VideoClipBytes : ByteArray;
public var MyVideo:Video;

public var qNetConnection:NetConnection;
public var qNetStream:NetStream;

public function Init():void
{   
    VideoClipBytes = new MyVideoClip() as ByteArray; //# fill a byte Array with embedded bytes 

    qNetConnection = new NetConnection(); qNetConnection.connect(null);
    qNetStream = new NetStream(qNetConnection);
    qNetStream.client = new Object();

    MyVideo = new Video(800, 600);
    MyVideo.attachNetStream(qNetStream);
    addChild(MyVideo);

    qNetStream.play(null); //# play mode is now bytes
    qNetStream.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN); //# ready for new audio/video data        
    qNetStream.appendBytes( VideoClipBytes ); //# add bytes to decoder queue (playback)

}

PS :我将您的一些变量设置为public,以便以后您可以从任何其他功能访问和控制它们。请记住,如果您在公共函数中创建 var,则它仅在该函数中保持有效,而对其他函数不存在。最好将此类变量公开提供给所有函数。

【讨论】:

    猜你喜欢
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多