2011-12-02 65 views
0

我有以下代碼對appendBytes()不工作的ActionScript 3

var playingStream:NetStream; 
function playBytes(bytes:ByteArray): void 
{ 

      var connect_nc:NetConnection = new NetConnection(); 
     connect_nc.connect(null); 
      playingStream=new NetStream(connect_nc); 
      playingStream.soundTransform= mySound; 
      playingStream.play(null); 
      playingStream.appendBytes(bytes); 
} 

我使用的外部接口回調調用從JS這個功能 但只要我編譯在.fla文件上面的代碼,它會拋出一個錯誤。

錯誤:1061通過靜態類型flash.net:NetStream

閃光燈help page參考呼叫可能未定義的方法對appendBytes表示此功能是在AS3有效。我要去哪裏?

回答

1

但是,您的代碼應該可以正常工作,appendBytes方法包含在Flash Player 10.1和更高版本中。如果你正在編譯低於10.1的任何東西,你會得到類似於你的問題中列出的錯誤。在ByteArray.org上查看以下博客文章,以及下面包含的示例。我爲另一篇文章構建了示例,我希望它也能幫助你!

AppendBytes


回放初始化:

var video:Video = new Video(width, height); 
var video_nc:NetConnection = new NetConnection(); 
var video_ns:NetStream = new NetStream(); 

video_nc.connect(null); 
video_ns.play(null); 
video_ns.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN); 

video.attachNetStream(video_ns); 

使用ProgressEvent.PROGRESS處理程序:

video_ns.appendBytes(bytesAvailable); 

這本質上是它的JIST,信息bytesAvailable將代表從所讀取的字節事件數據緩衝區。一個完整的例子如下:

package 
{ 

import flash.display.Sprite; 
import flash.events.NetStatusEvent; 
import flash.events.ProgressEvent; 
import flash.media.Video; 
import flash.net.NetConnection; 
import flash.net.NetStream; 
import flash.net.NetStreamAppendBytesAction; 
import flash.net.URLRequest; 
import flash.net.URLStream; 
import flash.utils.ByteArray; 

[SWF(width="1280", height="720")] 
public class NetStreamAppendBytes extends Sprite 
{ 

    var video:Video; 
    var video_nc:NetConnection; 
    var video_ns:NetStream; 

    var video_stream:URLStream; 

    public function NetStreamAppendBytes() 
    { 
     super(); 

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

     video_ns = new NetStream(video_nc); 
     video_ns.client = this; 
     video_ns.addEventListener(NetStatusEvent.NET_STATUS, ns_statusHandler); 

     video = new Video(1280, 720); 
     video.attachNetStream(video_ns); 
     video.smoothing = true; 

     video_ns.play(null); 
     video_ns.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN); 

     video_stream = new URLStream(); 
     video_stream.addEventListener(ProgressEvent.PROGRESS, videoStream_progressHandler); 

     video_stream.load(new URLRequest("path_to_flv")); 

     addChild(video); 
    } 

    private function ns_statusHandler(event:NetStatusEvent):void 
    { 
     trace(event.info.code); 
    } 

    private function videoStream_progressHandler(event:ProgressEvent):void 
    { 
     var bytes:ByteArray = new ByteArray(); 

     video_stream.readBytes(bytes); 
     video_ns.appendBytes(bytes); 
    } 

} 

} 

祝你好運!

+0

這種技術可以用於格式爲aac/m4a的音頻文件嗎? –

+1

如果您正在將一個持久黑幀編碼爲flv,則可以使用此技術將http流aac/m4a。我的測試flv編碼H264和aac/mp4a。查看這個鏈接瞭解更多關於http psudostreaming的信息。 http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12534/video-delivery-http-pseudo-streaming – stat

0

我看不出有什麼毛病第一眼的代碼,但在幫助頁面上有一張紙條:

This method is not supported for H.264 video in AIR 3.0 for iOS

你在iPhone上部署此,或從Adobe AIR?

+0

不,我沒有在ios上部署...簡單的adobe閃存 –

相關問題