有时AVPlayer失败,AVPlayerItemStatusFailed并且在失败发生后,AVPlayer继续失败AVPlayerItemStatusFailed.我试图清除AVPlayer实例并创建新实例,但我无法实现AVPlayerItemStatusFailed无法解决.也removingFromSuperview UIView有AVPlayer实例和初始化新项目与AVPlayer不会解决问题.
所以我认为AVPlayer无法完全清除.是否有人建议完全清除AVPlayer并使其在失败后工作?
错误日志:
Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo=0x1a689360 {NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x1a688e70 "The operation couldn’t be completed. (OSStatus error -12983.)", NSLocalizedFailureReason=An unknown error occurred (-12983)}
Run Code Online (Sandbox Code Playgroud)
UPD. 对于@matt
playerItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:filePath.path]];
if (!self.avPlayer) {
avPlayer = [AVPlayer playerWithPlayerItem:playerItem];
}
[avPlayer.currentItem addObserver:self forKeyPath:@"status" options:0 context:nil];
if (self.avPlayer.currentItem != self.playerItem) {
[self.avPlayer replaceCurrentItemWithPlayerItem:playerItem];
}
AVPlayerLayer *avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer];
avPlayerLayer.frame = self.bounds;
[self.layer addSublayer:avPlayerLayer]; …Run Code Online (Sandbox Code Playgroud) 我正在使用AV播放器在我的应用中播放视频.我正在使用seekToTime:toleranceBefore:toleranceAfter:
使用滑块搜索视频所以问题是当你向前滑动时,视频寻找完美(看起来像视频移动得更快)但是向后滑动的视频看起来不稳定而滑回(基本上不像滑动的florward节目那样平滑).有谁知道问题是什么,或者我做错了什么.
请帮忙.
我正在实施一个视频应用,列出视频并能够流式传输或观看本地视频.如果我尝试使用继承自AVPlayer的播放器观看视频,启动了很多线程,经过15-20次,系统不会很好地分配AVPlayer,即使我没有收到任何错误,播放器视图也是空白的什么都没发生......我需要杀死app来恢复.
怎么处理呢?
提前致谢
如果你需要在同一个视图中播放多个视频,似乎有两种方法:(1)每次创建新的AVPlayerLayers和AVPlayers; 或(2)重复使用相同的.
假设您的课程设计为播放多个视频,以下代码用于加载新视频:
var player = AVPlayer()
var playerItem:AVPlayerItem?
var playerLayer:AVPlayerLayer?
// Get file path to <videoURL>
videoURL = getFilePath(videoURL)
// Create player & layer
playerItem = AVPlayerItem(URL: NSURL(fileURLWithPath: videoURL))
player = AVPlayer(playerItem: playerItem!)
playerLayer = AVPlayerLayer(player: player)
Run Code Online (Sandbox Code Playgroud)
在创建AVPlayerLayer和AVPlayer之后,第二个选项是重用它们.所以你可以用这个代替最后两行:
player.replaceCurrentItemWithPlayerItem(playerItem!)
Run Code Online (Sandbox Code Playgroud)
每个选项的优缺点是什么?是否可以使用选项1,还是被认为是浪费?
我有一个播放视频的应用程序。这是与iOS 11,12和iOS 13.在iOS上11和12兼容,视频播放可以正常运行的使用无论是预期的AVPlayerViewController,甚至只是AVPlayerLayer。
但是,在 iOS 13 上,我开始收到报告,称很多用户在更新 iOS 时突然无法加载视频(或仅加载音频或仅加载第一帧)。我很难复制它,但有些人提到它主要发生在网络连接不良的情况下,并且使用 Network Link Conditioner 果然我能够复制它。
它特别影响 HLS 视频(例如,Reddit 使用的花哨的直播兼容视频)。它继续与 MP4 一起正常工作。这是一个失败的示例 URL:https : //v.redd.it/gl3chx2kd4v31/HLSPlaylist.m3u8
这是触发它的网络链接调节器配置文件:https : //i.imgur.com/XWsKUeM.jpg
这是触发它的示例项目,同时显示 AVPlayerViewController 和 AVPlayer(点击下载,Google 很奇怪):https : //drive.google.com/file/d/1RS5DvUypdOLFCYJe1Pt2Ig0fQljZDLs2/view
这是使用 AVPlayerViewController 展示它的示例代码:
let assetURL = URL(string: "https://v.redd.it/gl3chx2kd4v31/HLSPlaylist.m3u8")!
// The following MP4 URL *does* work, for instance
// let assetURL = URL(string: "https://giant.gfycat.com/DependentFreshKissingbug.mp4")!
let player = AVPlayer(url: assetURL)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController, animated: true) {
playerViewController.player!.play()
} …Run Code Online (Sandbox Code Playgroud) 我尝试[playerLayer renderInContext:UIGraphicsGetCurrentContext()]; 它会显示黑色背景.所以我得到当前的播放器项目作为重击图像连续它看起来不像视频播放只是静止图像连续流动.那么还有其他选择吗?
我有一个App,其中我使用AVPlayerLayer(在UIView的子类中使用,就像Apples AV Foundation Programming Guide一样).我在视图控制器中保存了几个视图控制器,它们对于菜单是可靠的(使用JASidePanels).问题如下:
一切正常,直到AVPlayers的视图控制器不被隐藏(呈现其他一些视图)并且应用程序进入后台,再次返回并返回视图.这会导致AVPlayerLayer显示空白/透明.该项目已加载,我可以尝试播放它确实播放但没有看到视频.
这种行为的解决方案是什么(以及它的原因是什么)?Thx提前.
我在我的应用程序中使用AVPlayer而不是MPMoviePlayerController,因为我想将播放器作为子层.但是我需要控制,如播放,暂停,搜索和全屏.如何在AVPlayer中获得该按钮?这就是我放置玩家的方式:
AVURLAsset *avasset = [[AVURLAsset alloc] initWithURL:URL1 options:nil];
AVPlayerItem *item = [[AVPlayerItem alloc] initWithAsset:avasset];
player = [[[AVPlayer alloc] initWithPlayerItem:item]retain];
playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
CGSize size = self.view.bounds.size;
float x = size.width/2.0-187.0;
float y = size.height/2.0 - 125.0;
playerLayer.frame = CGRectMake(x, y, 474, 320);
[playerLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
[self.view.layer addSublayer:playerLayer];
[player play];
Run Code Online (Sandbox Code Playgroud) 我UIViewController有一个插座UIView,我想用外部链接显示视频.在这种情况下,我尝试创建AVPlayerLayer并添加到我的UIView插座.
我的代码看起来像这样:
class VievController: UICollectionViewController {
@IBOutlet weak var playerView: UIView!
override func viewDidLoad(){
let playerItem = AVPlayerItem(URL: NSURL(string: ("https://www.youtube.com/watch?v=_yE_XgoWBso"))!)
let avPlayer = AVPlayer(playerItem: playerItem)
let playerLayer = AVPlayerLayer(player: avPlayer)
playerLayer.frame = playerView.bounds
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
playerView.layer.addSublayer(playerLayer)
avPlayer.play()
}
}//end class
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我的UIVIew插座上没有看到视频- 什么都没发生.你有什么建议我应该修理什么吗?
我正在使用多个AVPlayers在屏幕上显示内容,并且它们都在同时播放视频.问题是,有时候avplayer正在玩,但是avplayerlayer没有显示任何内容 - 你得到的只是一个空白屏幕.这是随机发生的.我甚至不知道如何调试这个.
有没有人对AVPLayers或AVPlayer图层有这些相同的问题?你能同时从不同的玩家那里引用相同的alaasset吗?我猜这些
avplayerlayer ×10
avplayer ×9
ios ×9
avfoundation ×4
objective-c ×3
avplayeritem ×1
calayer ×1
ios13 ×1
screenshot ×1
seekbar ×1
swift ×1
uislider ×1
uiview ×1
video ×1