Проблема с NetStream.pause () в ActionScript, вызываемом из Javascript - PullRequest
0 голосов
/ 28 октября 2008

Я работаю над очень простым проигрывателем, написанным на MXML + ActionScript, функции которого экспортируются для вызова простым Javascript на HTML-странице.

Оба кода указаны ниже.

Для mp3 "path" все отлично работает для воспроизведения, приостановки, возобновления и остановки ...
Для «пути» m4a запуск работает хорошо, останавливается тоже, но пауза вызывает ошибку
После запуска m4a, когда я нажал «пауза», он по праву останавливает поток.
Но когда я нажимаю кнопку, чтобы возобновить, она вообще не запускается

Кто-нибудь знает, где проблема?
Является ли причиной того, что он не работает, то, что я использую простой веб-сервер Apache, а не настоящий сервер потоковой передачи Flash?

Заранее благодарим за помощь.

MXML + ActionScript 3

   <?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="callBacks()">
    <mx:Script>
        <![CDATA[
                import flash.events.Event;
                import flash.media.Sound;
                import flash.net.URLRequest;
                import flash.external.ExternalInterface;
                public var playingChannel:SoundChannel;
                public var playingSound:Sound;
                public var pausePosition:int=0;
                public var playingUrl:String="";
                public var codec:String="";
                public var playingStream:NetStream;

                public function playSound(url:String):void {
                    if (playingUrl!=url) {
                        if (playingUrl!="") {
                            stopSound();
                        }
                        playingUrl=url;
                        codec=playingUrl.substring(playingUrl.length-3);
                        if (codec=="m4a") {
                            var mySound:SoundTransform;
                            var connect_nc:NetConnection = new NetConnection();
                            connect_nc.connect(null);
                            playingStream=new NetStream(connect_nc);
                            playingStream.play(url);
                        }
                        else if (codec=="mp3") {
                            playingSound=new Sound(new URLRequest(url));
                            playingChannel=playingSound.play();
                        }
                    }
                    else {
                        if (codec=="m4a")
                            playingStream.pause();
                        else
                            playingChannel=playingSound.play(pausePosition);
                    }
                }
                public function pauseSound():void {
                    if (codec=="m4a")
                        playingStream.pause();
                    else if (codec=="mp3") {
                        pausePosition=playingChannel.position;
                        playingChannel.stop();
                    }
                }
                public function stopSound():void {
                    if (codec=="m4a")
                        playingStream.close();
                    else if (codec=="mp3") {
                        pausePosition=0;
                        playingChannel.stop();
                    }
                    playingUrl="";
                }
                public function callBacks():void {
                    ExternalInterface.addCallback("play",playSound);
                    ExternalInterface.addCallback("pause",pauseSound);
                    ExternalInterface.addCallback("stop",stopSound);
                }
        ]]>
    </mx:Script> 
</mx:Application>



и основной HTML + Javascript

   <html>
<head>
<script src='jquery.js'></script>
<script>
    function play() {
        //alert('clicked');
        var url=$("#url").val();
        var k=url.substring(url.length-3);
        fromFlash('testFlash').play(url);
        var b=document.getElementById('pp');
        b.setAttribute('src','pauseButton.jpg');
        b.setAttribute('onclick','pause()');
    }
    function pause() {
        fromFlash('testFlash').pause();
        var b=document.getElementById('pp');
        b.setAttribute('src','playButton.jpg');
        b.setAttribute('onclick','play()');
    }
    function stop() {
        fromFlash('testFlash').stop();
        var b=document.getElementById('pp');
        b.setAttribute('src','playButton.jpg');
        b.setAttribute('onclick','play()');
    }
    function fromFlash(movieName) {
        var isIE = navigator.appName.indexOf("Microsoft") != -1;
        return (isIE) ? window[movieName] : document[movieName];
    }
</script>
</head>
<body>
<object id="testFlash" width="0" height="0">
    <param name="movie" value="player.swf"></param>
    <param name="allowFullScreen" value="true"></param>
    <embed name="testFlash" src="player.swf" type="application/x-shockwave-flash" allowfullscreen="true" width="0" height="0">
    </embed>
</object>
<input id="url"/>
<span><img id="pp" src="playButton.jpg" onclick="play()"/></span>
<span><img src="stopButton.jpg" onclick="stop()"/></span>
</body>
</html>

1 Ответ

2 голосов
/ 13 ноября 2008

Полагаю, вы хотите снова позвонить pause(), чтобы возобновить, а не play().
Согласно документации NetStream , метод pause() используется как для паузы, так и для возобновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...