PhoneGap无法getDuration()出Media API,但其他方法工作 [英] PhoneGap unable to getDuration() out of Media API, but other methods work

查看:222
本文介绍了PhoneGap无法getDuration()出Media API,但其他方法工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用PhoneGap建立了一个音频媒体录音机/播放器。这一切都很漂亮,但我打了一个皱纹,我似乎不能铁。

I'm building out an audio media recorder/player with PhoneGap. It's all working beautifully, but I've hit a wrinkle I can't seem to iron.

my_media.play(); 确实在我的Eclipse或XCode控制台中播放媒体w / o错误是为什么显示-1的警报令人费解。我希望 my_media.getDuration(); 可以返回我尝试播放的文件的持续时间。

my_media.play(); does indeed play the media w/o error in my Eclipse or XCode consoles which is why the alert that is showing a -1 is puzzling. I expect my_media.getDuration(); to return the duration of the file I'm attempting to play.

我的try / catch块不会抛出一个错误,我很困惑这一个。 以下是Media.getDuration()的PhoneGap文档

My try/catch block isn't throwing an error, I'm quite puzzled on this one. Here's the PhoneGap documentation on Media.getDuration().

function playAudio() {

    $('#btnStopRecording').removeClass('ui-disabled');
    $('#btnPlayMessage, #btnStartStopRecording, #btnDeleteMessage, #btnAcceptUpload').addClass('ui-disabled');

    my_media = new Media(fullRecordPath,

        // success callback
        function () {
            $('#btnPlayMessage, #btnStartStopRecording, #btnDeleteMessage, #btnAcceptUpload').removeClass('ui-disabled');
            $('#btnStopRecording').addClass('ui-disabled');
        },

        // error callback
        function (err) {
            console.log("attempting to play fullRecordPath = "+fullRecordPath);
            console.log("playAudio():Audio Error: " + err.code);
        }
    );

    var thisDuration;

    try{
        thisDuration = my_media.getDuration();
    } catch (err) {
        console.log("attempting to get duration error code "+err.code);
        console.log("attempting to get duration error message "+err.message);
    }

    alert("we're about play a file of this duration "+thisDuration);

    my_media.play();

    // stop playback when the stop button is tapped
    $('#btnStopRecording').off('tap').on('tap',function()
    {
        my_media.stop();
        $('#btnPlayMessage, #btnStartStopRecording, #btnDeleteMessage, #btnAcceptUpload').removeClass('ui-disabled');
        $('#btnStopRecording').addClass('ui-disabled');
    });

    // if the user leaves the page, stop playback
    $('#pageRecordMessage').live('pagehide', function()
    {
        my_media.stop();
        $('#btnPlayMessage, #btnStartStopRecording, #btnDeleteMessage, #btnAcceptUpload').removeClass('ui-disabled');
        $('#btnStopRecording').addClass('ui-disabled');
    });
}


推荐答案

当您调用my_media.getDuration()时,问题未加载。在您的问题中引用的文档中,示例代码将getDuration调用放入一个间隔:

The metadata for the media in question has not been loaded when you call my_media.getDuration(). In the documentation you referenced in your question the example code puts the getDuration call into an interval:

var timerDur = setInterval(function() {
    counter = counter + 100;
    if (counter > 2000) {
        clearInterval(timerDur);
    }
    var dur = my_media.getDuration();
    if (dur > 0) {
        clearInterval(timerDur);
        document.getElementById('audio_duration').innerHTML = (dur) + " sec";
    }
}, 100);

我建议做类似的事情。

这篇关于PhoneGap无法getDuration()出Media API,但其他方法工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆