Проблема внешнего интерфейса: ошибка вызова метода для NPObject

Создание веб-приложения для потоковой передачи флеш-видео с использованием внешнего API ActionScript 3. Я нахожусь на очень зачаточной стадии проекта, когда мы просто экспериментируем с внешним интерфейсом. Прямо сейчас у меня есть только флэш-объект и 3 кнопки для воспроизведения паузы и загрузки видео. Единственная кнопка, которая в настоящее время настроена на что-либо, - это кнопка загрузки. Мой swf и мой html-файл находятся в одной файловой системе, а мои видеофайлы находятся на другом сервере, а трафик перенаправляется через медиа-сервер.

Когда я нажимаю кнопку загрузки, она должна просто указать путь к видеофайлу на сервере. Вместо этого выдается сообщение об ошибке «Ошибка: метод вызова ошибки для NPObject».

Без лишних слов, вот фрагменты соответствующего кода:

ДЕЙСТВИЕ:

function loadVideo(newVideo){
clearInterval(progressInterval);
videoFile = newVideo;
stream.play(videoFile, 0, 0);
videoPositions = "0,0";
};
ExternalInterface.addCallback( "loadVideo", loadVideo );

JAVSCRIPT: (в заголовке моего html-документа)

<head>
<title> External API Test</title>
<script type="text/javascript">
    var player = getFlashMovie();
    if (typeof MY == 'undefined')
    {
        MY = {};
    }

    MY.load = function()
    {
        console.log('load called');
        getFlashMovie().loadVideo("/media/preview/09/04/38833_2_720X405.mp4");
    };


    function getFlashMovie()
    {
        var isIE = navigator.appName.indexOf('Microsoft') != -1;
        return (isIE) ? window['MYVID'] : document['MYVID'];
    }
</script>
</head>

HTML: (в том же документе, что и javascript)

<body>
<div> This is a test</div>
<div class='my-media-player'>
    <object width="720" height="405" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,16,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id='MYVID'>
        <param value="as3VideoPlayer.swf" name="movie">
        <param value="high" name="quality">
        <param value="true" name="play">
        <param value="false" name="LOOP">
        <param value="transparent" name="wmode">
        <param value="always" name="allowScriptAccess">
        <embed width="720" height="405" name='MYVID' allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" quality="high" loop="false" play="true" src="as3VideoPlayer.swf" wmode="transparent">
    </object>
    <div>
        <button type="button" class='play'>Play</button>
        <button type='button' class='pause'>Pause</button>
        <button type='button' class='load' onclick='MY.load()'>Load</button>
    </div>
</div>
</body>

В чем моя ошибка? Я читал во многих местах, что это проблема с безопасностью, но мой swf и html находятся в одной папке на моем локальном компьютере. Только файлы приходят извне, и в любом случае я думаю, что правильно установил параметры безопасности, когда объявляю свой флеш-плеер в теге объекта, но, возможно, мне что-то там не хватает.

если вы не можете решить мой вопрос напрямую, может кто-нибудь объяснить, что означает «метод вызова ошибки в NPObject»? Я уверен, что это характерно для flash-js-коммуникаций, потому что я никогда раньше этого не видел, и это то, что я почерпнул из своего поиска в Google.

Заранее благодарим.


person aamiri    schedule 23.09.2011    source источник
comment
Можете ли вы удалить видеокод, просто чтобы убедиться, что ExternalInterface работает правильно. Поместите что-нибудь очень простое в функцию AS - например, testSquare.gotoAndStop (2); просто чтобы убедиться на 100%, что он запускается из JS / HTML. Сообщите мне результаты оттуда   -  person Chris    schedule 24.09.2011
comment
Я изменил свой код as3 и js. В js я добавил функцию, которая вызывала функцию в as3, которую я также только что добавил. функция js передает строку в функцию as3. Затем функция as3 вызывает функцию js, которая запускает предупреждение. Это сработало. Означает ли это, что есть проблема с as3, связанная с видео?   -  person aamiri    schedule 26.09.2011


Ответы (2)


Я настоятельно рекомендую SWFObject. Помимо этого, я осмелюсь сказать, что вам нужно разрешить доступ скрипту:

<script type="text/javascript">
    // put your needed vars in the object below
    var flashVars = {};
    var params = {
         allowScriptAccess:"always"
    };

swfobject.embedSWF("myswf.swf", "myswf", "500", "400", "10.0.0", "", flashVars, params);

</script>
person Jacksonkr    schedule 25.09.2011

Можете ли вы попробовать установить Security.allowDomain ('*'); в вашем коде AS3 прямо при запуске?

person toad013    schedule 24.09.2011