标签: avplayer

iOS 在没有音频会话的情况下播放视频

MPMoviePlayerController我正在尝试使用 a或 .在我的应用程序中播放短视频AVPlayer。问题是(因为我的视频没有任何声音)我不想干扰后台其他应用程序播放的声音。我尝试玩AVAudioSession

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryAmbient  withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
[audioSession setActive:YES error:nil];
Run Code Online (Sandbox Code Playgroud)

但我没有运气。视频开始播放后,背景音乐就会停止。我什至尝试将音频会话设置为非活动状态:

   [[AVAudioSession sharedInstance] setActive:NO withOptions: AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,声音停止半秒,然后恢复,视频播放器停止播放。有什么方法可以实现我想要做的事情吗?谢谢。

mpmovieplayercontroller ios avaudiosession avplayer

2
推荐指数
1
解决办法
3040
查看次数

AVPlayereekToTime 与 UISlider 不正确

- (void)viewDidLoad {
    [super viewDidLoad];
    self.slider.maximumValue = 30;
}

- (void)slide:(UISlider *)slider {
    NSLog(@"....progress  slider value:%d", (int)slider.value);
    CMTime showingTime = CMTimeMakeWithSeconds((int)slider.value, 1);
    [self.player seekToTime:showingTime];
}
Run Code Online (Sandbox Code Playgroud)

每次我滑动 UISlider 时,控制台都会在我滑动时记录正确的数字。大约6秒。但滑块会跳回0;如果我将其滑动到大于 10 的值,例如 14,它会滑回到 10。

有谁能够帮助我 ?谢谢

uislider ios avplayer

2
推荐指数
1
解决办法
1502
查看次数

一个 AVPlayerItem 无法与多个 AVPlayer 实例关联,播放多个视频时出错

因此,我搜索了有关此错误的所有帖子,但没有任何效果。发生的情况是,当我第一次打开以下视图控制器时,一切正常。但是当我关闭控制器并尝试第二次播放视频时,我收到此错误。不知道为什么。

  NSMutableArray *AVPlayerItems;

 AVQueuePlayer *player ;

  NSURL *url = [NSURL fileURLWithPath:filePath];

  AVPlayerItem *firstItem = [AVPlayerItem playerItemWithURL: url3];



       [AVPlaterItems addObject:firstItem];



        player = [AVQueuePlayer queuePlayerWithItems:AVPlayerItems];


            playerController = [AVPlayerViewController new];
            playerController.delegate = self;
            [self.viewPlayer addSubview:playerController.view];
            playerController.view.frame = self.viewPlayer.frame;

            playerController.showsPlaybackControls = NO;


            playerController.player = player;
            [playerController.player play];
        playerController.player.muted = YES;



        [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

xcode ios avplayer avplayerviewcontroller

2
推荐指数
1
解决办法
1847
查看次数

AVPlayerViewController 点击“完成”会关闭错误的视图控制器

我有一个带有视图控制器(称为 A)的导航控制器,其中包含一个表格视图。我点击 tableview 中的一个项目,然后进入一个新的视图控制器,将其称为 B。在 BI 中显示 AVPlayerViewController,当完成查看时,我点击“完成”,它会一直返回到 vc A(而不是 B)。我究竟做错了什么?

avfoundation ios avplayer swift avplayerviewcontroller

2
推荐指数
1
解决办法
1446
查看次数

检测 AVPlayer 何时达到总播放时间的特定百分比?

当用户播放视频时,我试图弄清楚用户何时达到一定的播放百分比。

例如,用户播放视频,我想在用户播放 50% 时显示一些视图。

更澄清一下,有没有办法在 50% 发生时设置“监听器/观察器”?

ios avplayer swift

2
推荐指数
1
解决办法
489
查看次数

iOS - 使用 AVPlayer 检测 URL 流是否正常工作

这是在我的代码中,从 url 播放的样子:

private func play() {
    let streamUrl = ...        
    let playerItem = AVPlayerItem(url: streamURL)
    radioPlayer = AVPlayer(playerItem: playerItem)
    radioPlayer.volume = 1.0
    do {
         try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: AVAudioSessionCategoryOptions.mixWithOthers)
         try AVAudioSession.sharedInstance().setActive(true)
         UIApplication.shared.beginReceivingRemoteControlEvents()
     } catch {
         print("Error deactivating audio session.")
     }
     radioPlayer.play()
     startListeningForStreamFail()
     stopStartButton.setImage(#imageLiteral(resourceName: "pause_btn"), for: .normal)
}
Run Code Online (Sandbox Code Playgroud)

就像上面解释的代码片段一样,在调用该.play()函数后,我正在调用startListeningForStreamFail(),它将当前视图控制器注册到主线程上的两种类型的通知。

private func startListeningForStreamFail() {
    DispatchQueue.main.async { [weak self] in
        NotificationCenter.default.addObserver(self as Any, selector: #selector(self?.playerItemFailedToPlay), name: NSNotification.Name.AVPlayerItemPlaybackStalled, object: self?.radioPlayer?.currentItem)
        NotificationCenter.default.addObserver(self as Any, selector: #selector(self?.playerItemFailedToPlay), name: NSNotification.Name.AVPlayerItemFailedToPlayToEndTime, object: self?.radioPlayer?.currentItem)
    } …
Run Code Online (Sandbox Code Playgroud)

notifications ios avplayer swift avplayeritem

2
推荐指数
1
解决办法
3983
查看次数

Avplayer AVPlayerItemDidPlayToEndTime 通知未向观察者发送消息

我正在使用AVQueuePlayer播放远程音频文件列表。我想默认实现重复所有。

我的方法是,我正在观察AVPlayerItemDidPlayToEndTime通知,并在播放完毕后将 playerItem 添加到队列的后面。

nextAudio(notification: Notification)不运行在所有。需要这方面的帮助,或者更好的方式来实现无限游戏。

func playAudio(_ items: [AVPlayerItem]) {

    let avPlayerVC = AVPlayerViewController()
    let player = AVQueuePlayer(items: items)
    player.actionAtItemEnd = .pause
    avPlayerVC.player = player

    for item in items {
        NotificationCenter.default.addObserver(self,
                                               selector: #selector(FilesViewController.nextAudio(notification:)),
                                               name: .AVPlayerItemDidPlayToEndTime, object: item)
    }

    present(avPlayerVC, animated: true) {
        self.player.play()
    }
}

@objc func nextAudio(notification: Notification) {
    debugPrint("nextAudio was called")
    guard player != nil else { return }
    debugPrint("AVPlayerItemDidPlayToEndTime notif info  \(notification.userInfo)")
    if let currentItem = notification.userInfo!["object"] as? AVPlayerItem { …
Run Code Online (Sandbox Code Playgroud)

nsnotification ios avplayer swift

2
推荐指数
1
解决办法
1997
查看次数

音频正在模拟器中播放,但不在设备上

我正在开发一个播放音频文件的应用程序,可以让文件与 xcode 模拟器(v10.2)中的 AVPlayer 实例一起播放,但是当尝试在我的设备上播放时,音频文件无法播放。

我已阅读对同一问题的回复并已检查:

  • 设备上的静音铃声开关未打开
  • 我没有在 viewDidLoad 中实例化 AVPlayer
  • 音频文件的名称在代码中与文件中的大小写相同

以下是我设置记录器的代码:

func setUpRecorder(storyItem : StoryItem) {

    // Generate unique ID for recording for the StoryItem
    let uuid = UUID().uuidString + ".m4a"

    let audioFileName = getDocumentDirectory().appendingPathComponent(uuid)

    do {
        try self.realm.write {
            // storyItem.recording = audioFileName.absoluteString
            storyItem.recording = uuid
        }
    } catch {
        print("Error saving recording \(error)")
    }
    self.createStoryTableView.reloadData()

    let recordSettings = [AVFormatIDKey : kAudioFormatAppleLossless,
                          AVEncoderAudioQualityKey : AVAudioQuality.max.rawValue,
                          AVEncoderBitRateKey : 320000,
                          AVNumberOfChannelsKey : 2,
                          AVSampleRateKey : 44100.0 ] as [String …
Run Code Online (Sandbox Code Playgroud)

m4a avplayer swift

2
推荐指数
1
解决办法
590
查看次数

如何在 SwiftUI 中控制 AVPlayer?

在我的新 SwiftUI 项目中,我有一个用于从 url 流式传输音乐的 AVPlayer。现在我需要通过滑块控制播放曲目的当前时间和音量,这是设计的一部分:

在此处输入图片说明

现在我可以使用 UserData 最终类及其 @Published 变量来控制播放器,例如isPlaying

final class UserData: ObservableObject {
    // ...
    @Published var player: AVPlayer? = nil
    @Published var isPlaying: Bool = false
    //...

    func playPausePlayer(withSong song: Song, forPlaylist playlist: [Song]?) {
        //...
        if isPlaying {
            player?.pause()
        } else {
            player?.play()
        }

        isPlaying.toggle()
    }

}

Run Code Online (Sandbox Code Playgroud)

很高兴知道这部分是否有更好的决定

问题是属性currentTimeduration我只能从playeror 中获取player?.currentItem,所以我不能像这样制作滑块:

@EnvironmentObject var userData: UserData
// ...
Slider(value: userData.player?.currentItem?.currentTime()!, in: 0...userData.player?.currentItem?.duration as! Double, step: 1)
Run Code Online (Sandbox Code Playgroud)

我怎样才能控制这些事情?

binding avplayer swiftui

2
推荐指数
1
解决办法
2826
查看次数

如何在 iOS 13 中流式传输远程音频?(SwiftUI)

此代码AVPlayer仅适用于Playground

import AVFoundation

    var player = AVPlayer()
let playerItem = AVPlayerItem(url: URL(string: "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3")!)
      player = AVPlayer(playerItem: playerItem)
      player.play()

Run Code Online (Sandbox Code Playgroud)

当我尝试在物理设备上的 SwiftUI 应用程序上运行它时,使用以下代码:

 Button(action:{

              var player = AVPlayer()
            let playerItem = AVPlayerItem(url: URL(string: "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3")!)
                  player = AVPlayer(playerItem: playerItem)
                  player.play()

            print("Works")

               },label:{

                   Image("play")
          })
Run Code Online (Sandbox Code Playgroud)

它将Works打印到控制台。但是,它不会在设备上播放任何声音。

希望得到任何帮助,在这里找不到任何东西。

非常感谢!

avplayer swift swift5 ios13 swiftui

2
推荐指数
1
解决办法
1260
查看次数