在flex中播放mp4声音

时间:2015-12-19 11:49:40

标签: actionscript-3 flex audio rtmp

我正在播放播放mp4文件格式声音的音频播放器。
这个音频文件是用户录制的文件,稍后将在音频播放器中播放。

另一件事是mp4文件网址为rtmp而不是http,如:

rtmp://domain/vod/mp4:foldername/filname.mp4

我做了以下事情:

<s:Button id="btnPlay" label="Play" click="Play_clickHandler(event)" />

AS

public var sound:Sound;
public var mySoundChannel:SoundChannel;

protected function Play_clickHandler(event:MouseEvent):void
{
    sound = new Sound();
    sound.addEventListener(Event.SOUND_COMPLETE, soundComplete);
    var req:URLRequest = new URLRequest("rtmp://domain/vod/mp4:foldername/filname.mp4");
    sound.load(req);
    mySoundChannel = sound.play();
}

private function soundComplete(event:Event):void {
    sound.load(new URLRequest("rtmp://domain/vod/mp4:foldername/filname.mp4"));
    mySoundChannel = sound.play();
}

我尝试了上面的代码,但没有成功。它只播放mp3个文件格式。
我可以用任何方式播放这个文件吗?

注意:我不想使用任何方法将文件转换为mp3文件格式。
我试图在VideoPlayer中播放此文件。它有效,但设计看起来很糟糕。

供参考:

音频文件格式为:

enter image description here

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您无法使用Sound对象播放RTMP流的音频。

但要做到这一点,我认为最简单的方法是使用NetStream对象并使用其receiveVideo()功能,您只能接收音频流,而且您甚至不会需要任何视频播放器连接到它。

看看这个例子:

var server:String = 'rtmp://localhost/vod',
    stream:String = 'mp4:video.mp4',
    nc:NetConnection,
    ns:NetStream;

function init(): void
{
    nc = new NetConnection();
    nc.addEventListener(NetStatusEvent.NET_STATUS, on_NetStatus);
    nc.connect(server); 
}

function on_NetStatus(e:NetStatusEvent): void 
{
    if(e.info.code == 'NetConnection.Connect.Success'){
        ns = new NetStream(nc);
        ns.receiveVideo(false);
        ns.play(stream);
    }
}

init();

希望可以提供帮助。