【问题标题】:Ionic app in iOS unable to play local audio with cordova-plugin-mediaiOS 中的 Ionic 应用程序无法使用 cordova-plugin-media 播放本地音频
【发布时间】:2016-03-04 17:08:34
【问题描述】:

我无法使用 cordova-plugin-media 在 ionic 中播放音频,但这只发生在 iOS 和本地音频中。

控制器很简单,只需设置一个new Media 并播放它。回调只是返回他们参数的日志。

$scope.data = {};
$scope.playMedia = function(){
    // Get file path base for every each platform 
    var pathBase = ionic.Platform.platform().toLowerCase() === "android" ? "/android_asset/www/" : "";
    var source = pathBase + "audios/parts/99.mp3";
    console.log("source: " + source);

    // Set source and callbacks
    $scope.data.media = new Media(source, mediaSuccess, mediaError, mediaStatus);
    $scope.data.media.play();

    // Update media position every half second
    $interval(updatePosition, 500);
};

function updatePosition(){
    $scope.data.media.getCurrentPosition(function (position) {
        if (position > -1) {
            $scope.data.position = position;
            console.log(position);
        }
    });
};

媒体状态返回 2,which meansMedia.MEDIA_RUNNING,所以文件存在并且被找到,但是你看到的位置是 0。

2016-03-04 17:58:21.358 Play Local Audio[2549:1228498] source: audios/parts/99.mp3
2016-03-04 17:58:21.374 Play Local Audio[2549:1228498] THREAD WARNING: ['Media'] took '14.875000' ms. Plugin should use a background thread.
2016-03-04 17:58:21.376 Play Local Audio[2549:1228657] Found resource '/var/mobile/Containers/Bundle/Application/E70EE8B6-F5A8-49F7-9A7D-3A963C3AD439/Play Local Audio.app/www/audios/parts/99.mp3' in the web folder.
2016-03-04 17:58:21.395 Play Local Audio[2549:1228657] Playing audio sample 'audios/parts/99.mp3'
2016-03-04 17:58:21.398 Play Local Audio[2549:1228657] Playing stream with AVPlayer & custom rate
2016-03-04 17:58:21.400 Play Local Audio[2549:1228498] mediaStatus:
2016-03-04 17:58:21.401 Play Local Audio[2549:1228498] 2
2016-03-04 17:58:21.401 Play Local Audio[2549:1228498] $scope.data.media:
2016-03-04 17:58:21.401 Play Local Audio[2549:1228498] {"id":"a15cc81b-fd6d-4e12-7e95-0361d0a977a1","src":"audios/parts/99.mp3","_duration":0,"_position":-1}
2016-03-04 17:58:21.866 Play Local Audio[2549:1228498] 0
2016-03-04 17:58:22.341 Play Local Audio[2549:1228498] 0
2016-03-04 17:58:22.842 Play Local Audio[2549:1228498] 0
2016-03-04 17:58:23.343 Play Local Audio[2549:1228498] 0
2016-03-04 17:58:23.845 Play Local Audio[2549:1228498] 0
2016-03-04 17:58:24.346 Play Local Audio[2549:1228498] 0
2016-03-04 17:58:24.847 Play Local Audio[2549:1228498] 0
2016-03-04 17:58:25.348 Play Local Audio[2549:1228498] 0
2016-03-04 17:58:25.850 Play Local Audio[2549:1228498] 0
2016-03-04 17:58:26.351 Play Local Audio[2549:1228498] 0

但如果我尝试使用外部音频:http://www.sample-videos.com/audio/mp3/crowd-cheering.mp3 它可以工作。这是我用来在本地播放的音频。

    $scope.data.media = new Media('http://www.sample-videos.com/audio/mp3/crowd-cheering.mp3', mediaSuccess, mediaError, mediaStatus);

知道为什么吗?

【问题讨论】:

    标签: javascript ios cordova ionic-framework cordova-plugins


    【解决方案1】:

    这是影响iOS 9.2的插件的一个错误,我按照on the pull request的描述更改了两行并播放了音频。

    文件src/ios/CDVSound.m,替换

    第 219 行:

     CDVAudioFile* audioFile = [self audioFileForResource:resourcePath withId:mediaId doValidation:YES forRecording:NO]; 
    

    第 226 行:

    NSURL* resourceUrl = audioFile.resourceURL;
    

    【讨论】:

      【解决方案2】:

      您好,有另一种方法/解决方法可以解决此问题,如本文所述:

      https://forum.ionicframework.com/t/ios-9-2-cordova-plugin-media-no-sound-fix-on-the-way/45100/1

      在方法中:

      - (void)startPlayingAudio:(CDVInvokedUrlCommand*)command
      

      替换这些行:

      发件人:

       if (audioFile.rate != nil){
          float customRate = [audioFile.rate floatValue];
          NSLog(@"Playing stream with AVPlayer & custom rate");
          [avPlayersetRate:customRate];
      } else {
          NSLog(@"Playing stream with AVPlayer & custom rate");
          [avPlayer play];
      }
      

      收件人:

      if (audioFile.rate != nil){
          float customRate = [audioFile.rate floatValue];
          NSLog(@"Playing stream with AVPlayer & custom rate");
          [audioFile.player setRate:customRate];
      } else {
          NSLog(@"Playing stream with AVPlayer & custom rate");
          [audioFile.player play];
      }
      

      再次感谢此链接上答案的作者:

      https://forum.ionicframework.com/t/ios-9-2-cordova-plugin-media-no-sound-fix-on-the-way/45100/1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多