我尝试在youtube vimeo中嵌入不同的视频,dailymotion.
可悲的是,除了我的containerView的backgroundcolor之外,没有显示任何内容:
UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0, 320.0f, 200.0f)];
//item.url is my url which i get fro my webserver, it looks like http://www.youtube.com/watch?v=zPP6lXaL7KA&feature=youtube_gdata_player
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:item.url]];
AVPlayer *avPlayer = [AVPlayer playerWithPlayerItem:playerItem];
NSLog(@"%@",playerItem);
AVPlayerLayer *avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer];
avPlayerLayer.frame = self.frame;
[containerView.layer addSublayer:avPlayerLayer];
[self addSubview:containerView];
[avPlayer play];
if (avPlayer.status == AVPlayerStatusReadyToPlay) {
//[playingLbl setText:@"Playing Audio"];
NSLog(@"It works");
} else if (avPlayer.status == AVPlayerStatusFailed) {
// something went wrong. player.error should contain some information
NSLog(@"Not works"); …Run Code Online (Sandbox Code Playgroud) 我有一个使用AVPlayer和播放视频的应用程序AVPlayerLayer.在我的应用程序中,当应用程序进入后台时player,我AVPlayerLayer可以通过设置my 的属性来锁定应用程序时播放音频nil:
-(void)appEnteredBackgroundNotification:(NSNotification *)notification {
[[self playerLayer] setPlayer:nil];
}
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,音频将滞后/闪烁约0.5秒.对最终用户来说这听起来真的很糟糕.当应用程序进入前台并重新设置player属性时也是如此.
我怎样才能避免这种音频昙花一现?作为测试,我尝试在后台线程中删除播放器无济于事.
更新:我在WWDC上与一位苹果工程师进行了交谈,他们说这个问题是他们的一个错误(到目前为止还没有在iOS 9中修复),这种方法是正确的方法.大...
我使用以下代码在我的UIView上显示全屏视频:
- (void)playMovie:(NSString *)name :(NSString *)type
{
NSURL *movieURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:name ofType:type]];
self.movieAsset = [AVAsset assetWithURL:movieURL];
self.movieItem = [[AVPlayerItem alloc] initWithAsset:self.movieAsset];
self.moviePlayer = [[AVPlayer alloc] initWithPlayerItem:self.movieItem];
self.moviePlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone;
self.movieLayer.videoGravity = AVLayerVideoGravityResize;
self.movieLayer = [AVPlayerLayer playerLayerWithPlayer:self.moviePlayer];
[self.movieLayer setFrame:self.view.frame];
[self.view.layer addSublayer:self.movieLayer];
[self.moviePlayer addObserver:self forKeyPath:@"status" options:0 context:nil];
// Schedule stop after 6 seconds
[NSTimer scheduledTimerWithTimeInterval:6.0 target:self selector:@selector(stopCurrentMovie:) userInfo:nil repeats:NO];
}
Run Code Online (Sandbox Code Playgroud)
视频正在播放,但它不会在整个屏幕上填充(如果需要的话),但它只调整大小以保持其宽高比:我已经尝试了"videoGravity"的所有三个值...似乎没有任何改变.
我怎么解决?谢谢
我有一个本地视频播放使用AVPlayer和AVPlayerLayer(斯威夫特的iOS 8.2),我需要调整AVPlayerLayer(introPlayerLayer当它的父视图() introView)被调整,包括对取向变化.到目前为止,我所尝试过的任何东西似乎都没有用,而且playerLayer它的大小和位置都不对.
该AVPlayer设置使用本地MP4视频,并且AVPlayerLayer正在使用该播放器初始化.然后将该图层作为子图层添加到父视图中.
这是我的代码:
func playIntro() {
let path = NSBundle.mainBundle().pathForResource("intro", ofType: "mp4")
let url = NSURL.fileURLWithPath(path!)
let introPlayer = AVPlayer(URL: url)
introPlayer.allowsExternalPlayback = false
var introPlayerLayer = AVPlayerLayer(player: introPlayer)
introView.layer.addSublayer(introPlayerLayer)
introPlayerLayer.frame = introView.bounds
NSNotificationCenter.defaultCenter().addObserver(self, selector: "playerDidFinishPlaying:", name: AVPlayerItemDidPlayToEndTimeNotification, object: introPlayer.currentItem)
introView.hidden = false
introPlayer.play()
}
Run Code Online (Sandbox Code Playgroud)
我应该添加AVPlayerLayer作为子层UIView,或者我应该继承父容器(UIView),如https://developer.apple.com/library/ios/documentation/AudioVideo/的"播放器视图"部分所示Conceptual/AVFoundationPG/Articles/02_Playback.html.如果是这样,我将如何PlayerView在Swift中编写该子类(在Objective-C中显示)?提前感谢您的任何帮助.
我正在使用AVPlayer我的应用中播放视频.视频播放始终完美无缺,但暂停/恢复视频时除外.如果用户按下暂停按钮,然后恢复视频,则有时音频将位于视频之前.
视频将在正确的位置恢复,但音频已提前.这就好像按下暂停时,音频一直在运行.
当他们按下暂停按钮时,我正在做的就是调用pause方法AVPlayer,我也尝试根据文档设置它的rate属性0.0应该是完全相同的东西.
我只注意到我升级后,这种行为iPhone 6来iOS 9.我已经在iPhone 6 Simulator使用上测试了这个iOS 8.4并且我无法重新创建这种行为,但是AVPlayer在真实设备和模拟器上使用时通常存在差异所以我不能说100%确定到现在为止无法重新创建bug上iOS 8也是如此.
如果您查看iOS 9发行说明并搜索" AVFoundation",您会发现有些内容已发生变化:https://developer.apple.com/library/prerelease/ios/releasenotes/General/RN-iOSSDK-9.0/
我认为AVPlayerItem's新属性canUseNetworkResourcesForLiveStreamingWhilePaused是这个问题的根源,但经过测试,无论我是将其设置为YES或者NO,在这两种情况下问题仍然存在.
在这一点上,我不知道为什么会这样,但现在我最好的猜测是这是一个iOS 9错误.
我希望我不是唯一经历过这种情况的人,并且有人已经找到了解决方案,或者可能知道为什么会这样.我愿意尝试和测试任何东西.
谢谢您的帮助.
我正在尝试将AVPlayerLayer用作SCNMaterial分配给SCNSphere.
基于:https: //developer.apple.com/library/mac/samplecode/SceneKit_Slides_WWDC2013/Listings/Scene_Kit_Session_WWDC_2013_Sources_Slides_ASCSlideMaterialLayer_m.html
我创建一个玩家,创建一个玩家图层并尝试使用和不使用backgroundLayer作为我的SCNSphere的材质
问题是,我得到了相同的结果: SCNMaterialProperty没有渲染层
音频播放,视频根本没有渲染!
代码很简单:
// video player
let path = NSBundle.mainBundle().pathForResource("tb", ofType: "mp4")
let url = NSURL(fileURLWithPath: path!)
let player = AVPlayer(URL: url) // AVPlayer
player.actionAtItemEnd = .None
player.play()
let frame = CGRectMake(0, 0, 300, 300)
let playerLayer = AVPlayerLayer()
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
playerLayer.frame = frame
playerLayer.player = player
sceneMaterial = SCNMaterial()
sceneMaterial.specular.contents = UIColor.whiteColor()
sceneMaterial.shininess = 0.5
sceneMaterial.diffuse.contents = playerLayer
sphere.materials = [sceneMaterial]
Run Code Online (Sandbox Code Playgroud)
如上所述,我是否使用backgroundLayer:CALayer并将playerLayer添加为子图层会产生相同的结果.
任何帮助表示赞赏
我尝试在AVPlayerLayer中显示本地录制的视频,该视频有时可以工作。我可以听到录制视频中的音频,但看不到视频。有时视频和音频都可以工作,有时只有音频。
我已经尝试过使用AVPlayerLayer和AVPlayerViewController,但这两种情况都会出现相同的问题。所以这不是因为框架错误。
示例代码AVPlayerViewController:
let player = AVPlayer(url: url)
let playerController = AVPlayerViewController()
playerController.player = player
self.present(playerController, animated: true) {
player.play()
}
Run Code Online (Sandbox Code Playgroud)
示例代码AVPlayerLayer:
let asset = AVAsset(url: url)
let item = AVPlayerItem(asset: asset)
self.player = AVPlayer(playerItem: item)
self.player?.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions(), context: nil)
self.playerLayer = AVPlayerLayer(player: self.player!)
self.playerLayer?.frame = imageView.bounds
imageView.layer.addSublayer(self.playerLayer!)
Run Code Online (Sandbox Code Playgroud)
编辑1:
观察播放器状态时,错误为nil,状态为readyToPlay
编辑2:
如果 URL 是远程的,则工作正常。
编辑3:
如果我在视频完成导出后等待几秒钟,似乎可以工作。是否是文件未 100% 写入文件系统的原因? …
这个问题有同样的问题,但解决方案不起作用。
该AVPlayer有时扮演一个空白视频:有声音,但没有视频。
在播放空白视频时,我们打印了播放器的帧和状态。帧不为零并且设置正确。状态也是readyToPlay。该play函数也在主线程上调用。
换句话说,播放器层的帧有效,播放器也准备好播放。然而没有视频出现,即使有声音。
这个问题似乎是一个时间问题。如果我们在播放视频前等待 5-10 秒,则视频每次都能正常播放。
此问题出现在 iOS 10 上,而不是 iOS 8 或 9。
这个线程在苹果论坛上表明,它可能与一个bug
AVVideoCompositionCoreAnimationTool,我们也可以使用。
任何解决方案?
与 iPhone 5s 设备相比,这种情况在 iPhone 7 设备上发生的频率更高。
代码:
fileprivate func playVideo(_ videoURL: String, prompt: String) {
// Show <playerView>
playerView.isHidden = false
// Use new video in player
playerItem = AVPlayerItem(url: URL(fileURLWithPath: videoURL))
print("STATUS: \(player.status == AVPlayerStatus.readyToPlay). FRAME: \(playerLayer.frame). MAIN THREAD: \(Thread.isMainThread)")
player.replaceCurrentItem(with: playerItem)
// Start playing video
player.seek(to: kCMTimeZero)
player.actionAtItemEnd = .none …Run Code Online (Sandbox Code Playgroud) 我正在使用水平滚动的 UICollectionView Cell 上的 AVPlayer 和 AVPlayerLayer 类在全屏上显示“n”个视频的应用程序。我在 UIScrollView 上设置了分页。因为我只需要播放当前位置的播放器,否则“上一个和下一个”单元格播放器应该处于“暂停”状态。
我正在获取 url 格式的视频。所以最初我需要下载,然后它就会开始播放。所以每个人都不需要从 URL 下载视频。所以我决定将下载的视频缓存在本地。所以我下载并将其存储在本地文件中。然后我从本地加载视频,如果它存在于本地文件中。
问题 :
(一种)。“播放和暂停”在其相关索引上无法正常工作。最初播放索引为“0”。当我此时滚动到下一个索引时,当前索引播放器应该正在播放,下一个索引播放器应该处于“暂停”状态。它没有正确同步。
(b)。我可以看到上一个播放器的视频剪辑,直到下一个播放器开始播放。
(C)。所有查看的音频同时在后台播放,也可以在释放播放器时播放。(我的意思是,我可以在关闭一些视图或视图控制器后听到)
(d) 需要维护内存泄漏问题。
下面是我尝试的来源方式,
- (void)setVideoLoading:(NSString *)videoUrl{
NSString *urlString = videoUrl;
SHAREDATA.videoUrl = [NSURL URLWithString:urlString];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:SHAREDATA.videoUrl options:nil];
NSArray *requestedKeys = @[@"playable"];
//Tells the asset to load the values of any of the specified keys that are not already loaded.
[asset loadValuesAsynchronouslyForKeys:requestedKeys completionHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
AVPlayerItem *item = [AVPlayerItem playerItemWithAsset: asset];
if (self.avPlayer)
{
/* Remove existing player …Run Code Online (Sandbox Code Playgroud) objective-c video-streaming avplayer avplayerlayer avplayeritem
我正在以这种方式设置AVPlayer一个UIView:
fileprivate func setUpAVPlayer(){
self.cardModel?.urlStrings?.forEach({ (urlString) in
guard let url = URL(string: urlString) else { return }
let asset = AVAsset(url: url)
let playerItem = AVPlayerItem(asset: asset, automaticallyLoadedAssetKeys: nil)
playerItem.addObserver(self, forKeyPath: #keyPath(AVPlayerItem.status), options: [.old, .new], context: nil)
self.playerItemArray.append(playerItem)
})
player = AVPlayer(playerItem: playerItemArray[0])
}
Run Code Online (Sandbox Code Playgroud)
在layoutSubviews我布局显示播放器的playerLayer:
let playerLayer = AVPlayerLayer(player: player)
playerLayer.videoGravity = .resizeAspectFill
self.playerView.layer.insertSublayer(playerLayer, at: 0)
playerLayer.frame = playerView.bounds
Run Code Online (Sandbox Code Playgroud)
在发生某个事件时,我更改播放器的当前项目:
fileprivate func goToNextVideo(){
counter = counter+1
counter = min(playerItemArray.count-1, counter)
self.player?.replaceCurrentItem(with: self.playerItemArray[self.counter])
self.player?.seek(to: .zero) …Run Code Online (Sandbox Code Playgroud) avplayerlayer ×10
avplayer ×9
ios ×6
avfoundation ×4
avplayeritem ×3
objective-c ×3
swift ×3
video ×2
calayer ×1
ios9 ×1
iphone ×1
scenekit ×1
youtube ×1