簡體   English   中英

Cordova 媒體插件沒有實現 audioPlayerEndInterruption

[英]Cordova Media Plugin doesn't implement audioPlayerEndInterruption

我創建了一個 iOS 應用程序,該應用程序在后台運行時播放音頻。 如果音頻被中斷(即:電話),音頻將停止並且永遠不會恢復。

我認為這是因為cordova媒體插件沒有實現audioPlayerEndInterruption

我擅長 Javascript,但對 Objective-C 幾乎一無所知。 有人對如何添加此功能有建議嗎?

是否有實現 audioPlayerEndInterruption 的不同媒體插件,或者是否有一種簡單的方法將 audioPlayerEndInterruption 合並到cordova 插件中?

CDVSound.h -modify:add: , MEDIA_END_INTERRUPT = 5

enum CDVMediaStates {
    MEDIA_NONE = 0,
    MEDIA_STARTING = 1,
    MEDIA_RUNNING = 2,
    MEDIA_PAUSED = 3,
    MEDIA_STOPPED = 4,
    MEDIA_END_INTERRUPT = 5
};

CDVSound.m -添加:

- (void)audioPlayerEndInterruption:(AVAudioPlayer*)player successfully:(BOOL)flag
{
    CDVAudioPlayer* aPlayer = (CDVAudioPlayer*)player;
    NSString* mediaId = aPlayer.mediaId;
    CDVAudioFile* audioFile = [[self soundCache] objectForKey:mediaId];
    NSString* jsString = nil;

    if (audioFile != nil) {
        NSLog(@"Ended Interruption of playing audio sample '%@'", audioFile.resourcePath);
    }
    if (flag) {
        jsString = [NSString stringWithFormat:@"%@(\"%@\",%d,%d);", @"cordova.require('org.apache.cordova.media.Media').onStatus", mediaId, MEDIA_STATE, MEDIA_END_INTERRUPT];
    } else {
        jsString = [NSString stringWithFormat:@"%@(\"%@\",%d,%@);", @"cordova.require('org.apache.cordova.media.Media').onStatus", mediaId, MEDIA_ERROR, [self createMediaErrorWithCode:MEDIA_ERR_DECODE message:nil]];
    }

    [self.commandDelegate evalJs:jsString];
}

Media.js -modify:add: Media.MEDIA_END_INTERRUPT = 5; AND , "結束中斷"

// Media states
Media.MEDIA_NONE = 0;
Media.MEDIA_STARTING = 1;
Media.MEDIA_RUNNING = 2;
Media.MEDIA_PAUSED = 3;
Media.MEDIA_STOPPED = 4;
Media.MEDIA_END_INTERRUPT = 5;
Media.MEDIA_MSG = ["None", "Starting", "Running", "Paused", "Stopped", "EndInterrupt"];

然后找到 Media.onStatus = function(id, msgType, value) { 並在 case Media.MEDIA_STATE : block ...

 if(value == Media.MEDIA_END_INTERRUPT) {
     //do whatever you want
 }

只關注這里。 我最終為此編寫了一個插件,該插件覆蓋了一些默認的cordova 媒體插件(v0.2.12)方法。 我在這里發布了一個鏈接,但是代碼一團糟。 我只是想得到一些有用的東西,而不是真的打算分享。 但在這里(沒有提供文件,抱歉):

https://github.com/stevethorson/Interruptible-Cordova-Media.git

我從媒體插件本身解決了這個問題,使用 getCurrentPosition 方法我能夠檢測到流媒體是否被電話或語音郵件中斷......然后再次停止並重新播放音頻。 我希望這可以幫助我永遠帶我使用媒體插件和shoutcast 的人。

 var mediaplayer = new Media(streamingUrl, mediaSuccess, mediaFail, mediaState); mediaplayer.play({playAudioWhenScreenIsLocked :true}); var prevPos = 0; var mediaTimer = setInterval(function () { // get media position mediaplayer.getCurrentPosition( // success callback function (currentposition) { if (currentposition > prevPos) { prevPos = currentposition; } else if (currentposition === prevPos) { stop(); play(); } else { console.log("can't get pos"); } }, // error callback function (e) { alert+("Error getting pos=" + e); } ); }, 5000);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM