NetStream.publish Веб-камера для FMS работает в автономном проигрывателе, но не в браузере - PullRequest
2 голосов
/ 24 марта 2011

Я пытаюсь опубликовать видео с веб-камеры на сервере Flash Media Server 2. Мой код работает в автономном проигрывателе Flash (протестирован с 10.0 и 10.2), но не в плагине браузера (протестирован с 10.2, оба вIE и Opera. Соединение с моей FMS успешно работает, но после публикации ничего не происходит, я никогда не получаю событие NetStream.Publish.Start. На сервере я вижу соединение в консоли управления, даже поток ввкладка потоков. Но я не могу подключиться к этой области.

Кто-нибудь знает, что может пойти не так?

NetConnection.defaultObjectEncoding = ObjectEncoding.AMF0; // needed to get correct connection to FMS2

private function netStatusHandler(event:NetStatusEvent):void {
        output.appendText("\n" + event.info.code);
        switch (event.info.code) {
            case "NetConnection.Connect.Success":
                output.text = ("Connection successful, streaming camera...");
                connectCamera();
                break;
            case "NetConnection.Connect.Failed":

                break;
            case "NetStream.Play.StreamNotFound":
                break;

            case "NetStream.Publish.Start":
                output.appendText("\nPublishing video!");
                break;

        }
    }

    private function connectCamera(ev:Event = null):void {
        var stream:NetStream = new NetStream(connection);
        stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
        stream.attachCamera(camera);
        videoURL = createGUID();
        stream.publish(videoURL, "live");
        output.text = "publish stream...";
    }

1 Ответ

1 голос
/ 25 марта 2011

Хорошо, я обнаружил, что моя проблема здесь: Я объявляю ссылку на переменную stream внутри функции connectCamera:

private function connectCamera(ev:Event = null):void {
    var stream:NetStream = new NetStream(connection);
}

То есть stream объявляется только внутри области действия этой функции. Это не проблема для автономного проигрывателя, но в плагине для браузера. Похоже, что плагин для браузера выполняет гораздо больше работы на сборщике мусора, собирая мой поток после выполнения функции. Поэтому мне нужно объявить переменную stream вне области действия функции, внутри области действия класса.

var stream:NetStream;
private function connectCamera(ev:Event = null):void {
    stream = new NetStream(connection);
}

Вы должны всегда объявлять вещи, которые вам понадобятся позже, как поле вашего класса, а не внутри функции. Вы просто никогда не знаете, когда GC может очистить эти вещи.

...