簡體   English   中英

無法在 iOS 中使用 avplayer 播放音樂?

[英]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。 我向你展示了我的兩個快速示例。

AVAudioPlayerNSData播放 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.

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