【问题标题】:PhoneGap Media Plugin - can you detect when url stream has loaded?PhoneGap Media Plugin - 你能检测到 url 流何时加载吗?
【发布时间】:2015-02-13 00:13:32
【问题描述】:

我在通过 Build 3.1 使用 PhoneGap Media 插件让我的音频播放器在 iOS 和 Android 中正常工作时遇到了一些问题

我的播放和停止按钮可以正常工作,但是当您点击播放时,音频 URL 加载时会出现轻微延迟,并且会冻结操作系统。我可以应付它,因为它的延迟很短,所以我想我会在屏幕上弹出一个加载图标。

我在这里发布了几次试图让 JS 以我不是专家的身份工作,但现在我意识到我的代码中没有任何内容可以检查音频是否真的在播放!

playAudio 函数加载音频,然后将播放按钮设置为停止按钮。我以为function success() {表示它正在播放,但实际上它意味着它已完成播放。

在我的代码中,当单击音频链接时,加载器功能会在屏幕上显示一个微调器,我认为“成功”会关闭加载器,因为它加载时实际上发生的事情是 laoder 保持开启并消失曲目结束后!

我意识到我需要一种方法来检测曲目是否正在播放!

我该怎么做?!?!!

功能如下:

function loadPlay(src, trackName) {
   loader();
   playAudio(src, trackName);
}

function loader() {
        // make a loader spinner appear as track loads
    $(".loading").addClass("loadingnow");
}

function playAudio(src,trackname) {
    // for Android
    if (audioPlaying === false) {
        if (device.platform == 'Android') {
            src = '/android_asset/www/' + src;
        }
        media = new Media(src, success, error_error);
        media.play();
        //add playing class so play button is replaced with stop button
        document.getElementById(trackname).parentNode.className="playing";
        audioPlaying = true;
    } else {
        //audio is already playing
    }
}

function success() {
    // track isplaying so remove the stop button put play button back
    $(".playing").removeClass("playing");
    // now track is playing remove the loader spinner
    $(".loading").removeClass("loadingnow");

    audioPlaying = false;
}

function error_error(e) {
    //alert('great error');
    //alert(e.message);
}

function stopAudio() {
    // stop playing track
    if (media) {
        media.stop();
        audioPlaying = false;
    }
}

这里是 PhoneGap Media 插件 API 的链接: http://docs.phonegap.com/en/3.1.0/cordova_media_media.md.html#Media

我需要使用这个位吗?

Media.MEDIA_STARTING = 1;
Media.MEDIA_RUNNING = 2;
Media.MEDIA_PAUSED = 3;
Media.MEDIA_STOPPED = 4;

【问题讨论】:

    标签: javascript cordova media


    【解决方案1】:

    来自docs

    The following constants are reported as the only parameter to the mediaStatus callback function.
    
    Media.MEDIA_NONE = 0;
    Media.MEDIA_STARTING = 1;
    Media.MEDIA_RUNNING = 2;
    Media.MEDIA_PAUSED = 3;
    Media.MEDIA_STOPPED = 4;
    

    mediaStatus 回调是Media 构造函数中提供的可选第三个回调...

    media = new Media(src, success, error_error, status_change);
    
    function status_change(code) {
        switch (code) :
        case Media.MEDIA_STOPPED : doSomething(); break;
    }
    

    【讨论】:

      【解决方案2】:

      据我所知,ilovett 的回答可能对您不起作用,因为 doSomething() 函数将在另外两种情况下被调用:

      • 当有人使用 media.stop() 停止音乐时
      • 当媒体在 android 上发布 (media.release()) 时(不确定其他人,但 iOS 不会调用它)。

      我这样做的方式是设置一个变量以确保该函数不会被意外调用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-04
        • 1970-01-01
        • 2011-05-06
        • 2012-05-17
        相关资源
        最近更新 更多