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)
但在这种情况下,声音停止半秒,然后恢复,视频播放器停止播放。有什么方法可以实现我想要做的事情吗?谢谢。
- (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。
有谁能够帮助我 ?谢谢
因此,我搜索了有关此错误的所有帖子,但没有任何效果。发生的情况是,当我第一次打开以下视图控制器时,一切正常。但是当我关闭控制器并尝试第二次播放视频时,我收到此错误。不知道为什么。
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) 我有一个带有视图控制器(称为 A)的导航控制器,其中包含一个表格视图。我点击 tableview 中的一个项目,然后进入一个新的视图控制器,将其称为 B。在 BI 中显示 AVPlayerViewController,当完成查看时,我点击“完成”,它会一直返回到 vc A(而不是 B)。我究竟做错了什么?
当用户播放视频时,我试图弄清楚用户何时达到一定的播放百分比。
例如,用户播放视频,我想在用户播放 50% 时显示一些视图。
更澄清一下,有没有办法在 50% 发生时设置“监听器/观察器”?
这是在我的代码中,从 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) 我正在使用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) 我正在开发一个播放音频文件的应用程序,可以让文件与 xcode 模拟器(v10.2)中的 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) 在我的新 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)
很高兴知道这部分是否有更好的决定
问题是属性currentTime,duration我只能从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)
我怎样才能控制这些事情?
此代码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打印到控制台。但是,它不会在设备上播放任何声音。
希望得到任何帮助,在这里找不到任何东西。
非常感谢!