2016-01-21 57 views
1
string mediafile; 
mediafile=Constants.AudioLink; 
NSUrl url1=new NSUrl(mediafile); 
var audioplayer=AVAudioPlayer.FromUrl(url1); 

URL正在獲取鏈接正確,但音頻播放器獲取值null。它拋出以下異常:AVAudioplayer初始化組件拋出一個空例外

Could not initialize an instance of the type 'AVFoundation.AVAudioPlayer': the native 'initWithContentsOfURL:error:' method returned nil. 

有可能通過設置忽略這個條件:MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure to false

我能做些什麼,請給我的解決方案。

+0

這個錯誤是由於你的'NSURL'沒有指向一個有效/存在的文件。嘗試用'var myLocalMedia = AudioToolbox.AudioSource.Open(新的NSUrl(mediafile),AudioFilePermission.Read,AudioFileType.MP3)打開媒體文件;'將'AudioFileType.MP3'更改爲正確(並支持)您的媒體文件文件。 'myLocalMedia'爲空嗎?如果是這樣,你將無法從該NSURL創建一個'AVAudioPlayer'。 – SushiHangover

+0

是否有任何玩家在ipad –

+0

「音樂歌曲」中播放音頻歌曲? CoreAudio支持〜15種不同的音頻容器/類型,你有什麼類型的媒體? – SushiHangover

回答

3

這些是裝載的非常快的例子/播放.mp3文件有BundledResource一個構建類型(我投進了項目的Resources文件夾),因此被放置在應用程序的根目錄)。

我通過AudioToolbox.AudioSource.Open進行快速檢查,以確保文件存在,可以讀取,並且是有效的媒體文件類型,因此我知道AVAudioPlayer不會嘗試加載它時發出致命錯誤。

AVAudioPlayer player; // Class level object ref 
partial void playButtonTouch (UIButton sender) 
{ 
    if (player != null && player.Playing) 
     player.Stop(); 
    else { 
     var mp3File = "WildTurkeysEN-US.mp3"; 
     var mp3URL = new NSUrl (mp3File); 
     Console.WriteLine (mp3URL.AbsoluteUrl); 
     var mp3 = AudioToolbox.AudioSource.Open (mp3URL, AudioFilePermission.Read, AudioFileType.MP3); 
     if (mp3 != null) { 
      Console.WriteLine (mp3.EstimatedDuration); 
      player = AVAudioPlayer.FromUrl (mp3URL); 
      player.Play(); 
     } else { 
      Console.WriteLine ("File could not be loaded: {0}", mp3URL.FilePathUrl); 
     } 
    } 
} 
+0

mp3url中拋出的錯誤可以採取值但mp3獲得空值,因此無法播放音頻。 –

+0

創建'NSUrl'對象並不能確定文件是否存在,所以如果你得到了'mp3'的空值,那麼文件就不能被加載。這可能是由於該文件不存在或者它不是基於您要加載的'AudioFileType.XXX'的有效媒體類型(在我的示例中爲'MP3'類型) – SushiHangover