appendBytes () не работает на ActionScript 3 - PullRequest
0 голосов
/ 02 декабря 2011

У меня есть следующий код

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 Вызов возможно неопределенного метода appendBytes через ссылку со статическим типом flash.net:NetStream

Вспомогательная страница справки показывает, что функция действительна в AS3. Куда я тогда уйду ?? 1011 *

Ответы [ 2 ]

1 голос
/ 03 декабря 2011

Ваш код должен работать, однако метод 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 голосов
/ 03 декабря 2011

На первый взгляд, я не вижу ничего плохого в коде, но на странице справки есть примечание:

Этот метод не поддерживается для видео H.264 в AIR 3.0 для iOS

Вы развертываете это на iphone или с Adobe Air?

...