Я работаю над очень простым проигрывателем, написанным на MXML + ActionScript, функции которого экспортируются для вызова простым Javascript на странице HTML.
Оба кода приведены ниже.
Для "пути" mp3 все работает отлично: воспроизведение, приостановка, возобновление и остановка ...
Для m4a "path" запуск работает хорошо, остановка тоже, но пауза вызывает ошибку
После запуска 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>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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