[英]Ionic app in iOS unable to play local audio with cordova-plugin-media
我无法使用cordova-plugin-media播放离子音频,但这仅在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, 表示 Media.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
: 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);
知道为什么吗?
这是影响iOS 9.2的插件的一个错误,我按照请求请求中的描述更改了两行,并播放了音频。
文件src/ios/CDVSound.m
,替换
第219行:
CDVAudioFile* audioFile = [self audioFileForResource:resourcePath withId:mediaId doValidation:YES forRecording:NO];
第226行:
NSURL* resourceUrl = audioFile.resourceURL;
您好,还有另一种方法/ workAround可以解决此问题,如本文此处所述:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.