![](/img/trans.png)
[英]unable to play music from document directory through AVPlayer in iOS?
[英]Unable to play music from using avplayer in iOS?
我通過將音樂轉換為NSData將音樂上傳到服務器。 當我將文件上傳到服務器時,我也將其保存到文檔目錄中。因此,當我傳遞除我上傳之外的任何其他音樂文件的 url 時,它會播放音樂。但是當我嘗試播放我上傳的音樂文件時,它會播放不播放音樂。下面是代碼。
播放音樂的代碼
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:fileURL];
AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];
player = [AVPlayer playerWithURL:fileURL];
[player play];
它可能會幫助你
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:fileURL options:nil];
NSArray *keys = [NSArray arrayWithObject:[NSString stringWithFormat:@"%d",self.indexValue]];
[asset loadValuesAsynchronouslyForKeys:keys completionHandler:
^{
dispatch_async( dispatch_get_main_queue(),
^{
/* IMPORTANT: Must dispatch to main queue in order to operate on the AVPlayer and AVPlayerItem. */
if (![[keys objectAtIndex:0] isEqual:[NSString stringWithFormat:@"%d",self.indexValue]])
{
}
// NSLog(@"&______________________________________________NOreturned");
playerItem = [AVPlayerItem playerItemWithAsset:asset];
if (!player)
{
player=nil;
}
player=[AVPlayer playerWithPlayerItem:playerItem];
[player play];//: Playground - noun: a place where people can play
});
}];
}
player
對象有一個冗余的重新初始化。
不要忘記訂閱通知,例如:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:nil];
正如評論中所說,通過瀏覽器使用其 URL 下載文件並嘗試通過常規播放器播放。
或者創建資產,並詢問它的曲目、持續時間、可播放狀態。
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:_videoURL options:nil];
NSArray *requestedKeys = @[@"tracks",@"playable",@"duration"];
__weak typeof(self) wSelf = self;
[asset loadValuesAsynchronouslyForKeys:requestedKeys completionHandler:
^{
for (NSString *thisKey in requestedKeys) {
NSError *error = nil;
AVKeyValueStatus keyStatus = [asset statusOfValueForKey:thisKey error:&error];
if (keyStatus == AVKeyValueStatusFailed) {
//Failed here
//return
}
}
if (!asset.isPlayable) {
//not playable....
}
}
我建議您使用AVAudioPlayer
播放 mp3。 我向你展示了我的兩個快速示例。
AVAudioPlayer
從NSData
播放 mp3 文件的第一個例子
var audioPlayer = AVAudioPlayer()
func playFromCore() {
let object = fetchedResultsController.fetchedObjects!.first as! Song
let file = object.file // This is NSData
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
AVAudioSession.sharedInstance().setActive(true, error: nil)
audioPlayer = AVAudioPlayer(data: file, fileTypeHint: AVFileTypeMPEGLayer3, error: nil)
audioPlayer.prepareToPlay()
audioPlayer.play()
}
AVAudioPlayer
播放NSURL
時的第二個例子
func playMusic() {
let url = NSBundle.mainBundle().URLForResource("89", withExtension: "mp3")!
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
AVAudioSession.sharedInstance().setActive(true, error: nil)
audioPlayer = AVAudioPlayer(contentsOfURL: url, error: nil)
audioPlayer.prepareToPlay()
audioPlayer.play()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.