使用MPMoviePlayerControllers,通过设置MPMovieScalingMode可以轻松缩放电影.(如MPMovieScalingModeFill,MPMovieScalingModeAspectFill)
使用AVPlayer/AVPlayerLayer,我似乎无法找到类似的东西.我自己必须这样做吗?如果是这样,我该如何开始呢?
当应用程序启动并将委托设置为appDelegate时,我正在设置AVAudioSession.一切似乎都在工作(播放等),除了当电话接到电话时没有调用委托上的beginInterruption.当呼叫结束时,会调用endInterruption.
我唯一的想法是我以前使用的音频播放器代码基于AVAudioPlayer,但现在使用的是AVPlayer.用于处理中断的AVAudioPlayer委托的回调仍在那里,但它们以任何方式发生冲突似乎很奇怪.
我正在寻找一种方法来测试使用AVPlayer的应用程序.
如何加载视频文件?我试图记录操作,但在调用NSOpenPanel.runModal()时记录停止.
任何的想法?
我试图AVPlayer通过UISlider搜索来实现流畅的视频清理,似乎Apple有技术问答并解释了如何实现这一点,但我的问题是如何使用此方法并使用UISlider更改播放器当前时间:
stopPlayingAndSeekSmoothlyToTime(newChaseTime:CMTime)
这是我的代码:
//Play Intro Movie
let videoURL = Bundle.main.url(forResource: "intro", withExtension: "mp4")
player = AVPlayer(url:videoURL!)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.view.frame
view.layer.addSublayer(playerLayer)
//videoPlayer.play()
view.addSubview(slider)
slider.maximumValue = 0
slider.maximumValue = Float(CMTimeGetSeconds((player.currentItem?.asset.duration)!))
Run Code Online (Sandbox Code Playgroud)
这是Apple示例代码:
func stopPlayingAndSeekSmoothlyToTime(newChaseTime:CMTime)
{
player.pause()
if CMTimeCompare(newChaseTime, chaseTime) != 0
{
chaseTime = newChaseTime;
if !isSeekInProgress
{
trySeekToChaseTime()
}
}
}
func trySeekToChaseTime()
{
if playerCurrentItemStatus == .unknown
{
// wait until item becomes ready (KVO player.currentItem.status)
}
else if playerCurrentItemStatus …Run Code Online (Sandbox Code Playgroud) tl;dr 我试图在 Twitter 应用程序中重新创建这个:https : //i.imgur.com/173CVyM.mp4
如您所见,Twitter 在提要(表格视图单元格)中播放视频,当视频被点击时,视频会平滑地过渡到它自己的视图控制器,而不会停止或缓冲视频。
我已经完成了在提要部分中播放的视频(在表格视图单元格中),但现在我被困在如何实际将视频平滑地转换为点击的视图控制器上。
在高层次上,我需要在这里做什么?
我当前的设置有一个AVPlayer实例作为每个表视图单元格的一部分。我会将AVPlayer实例传递给视图控制器并从那里继续播放视频吗?内存管理呢?我觉得AVPlayer每个表格视图单元格都有一个实例会导致一些问题,但我不完全确定。
作为第二个问题,如果我想忽略花哨的动画/过渡,当在表格视图单元格中点击视频时,我如何继续在视图控制器中无缝播放视频?
我们正在开发一款需要通过AVPlayer播放视频文件的应用.文件需要存储在用户的设备上,但也必须在下载时播放.
目前我们已经构建了一个下载模块,该模块使用ASIHTTPRequest库通过PHP获取视频文件(我们不希望媒体可以通过公共URL链接)并将它们异步写入磁盘.
然后我们根据AV Foundation Programming Guide设置AVPlayer ,使用AVURLAsset获取文件,使用资产制作AVPlayerItem,使用项目构建AVPlayer,然后将播放器设置为AVPlayerLayer.播放器在完全下载的视频文件中运行正常,并且还可以在模拟器中完美地运行逐步下载的文件.
不幸的是,在实际设备上,播放器的行为发生了变化,相反,它似乎只加载了一次视频而不会尝试从磁盘中获取新的数据包.结果是播放器将视频和音频播放到视频中的点,该点标记了资源加载时下载进度的位置(例如,如果缓冲了2MB的数据,则创建播放器,播放器将仅播放2MB的数据).因为它有视频的标题,播放器会很高兴地继续认为它在视频的整个持续时间内播放,但没有其他视频呈现在屏幕上.
最后一个问题是,如果将视频插入AVComposition并使用该视频创建AVPlayer,则渐进式视频将正常播放.这将是一个很好的解决方案(无论如何我们的应用程序都是必需的),除了我们的应用程序的客户端要求视频可以通过AirPlay在Apple TV上播放,AVCompositions无法播放.
有没有人知道是否有办法使用AVURLAssets构建的AVPlayer逐步下载视频文件?有没有办法强制播放器/ playerItem使用AVURLAsset从磁盘读取,就像它看起来像AVComposition一样,而不是看似在内存中缓存视频?
谢谢!
我从AVPlayer编写自定义播放器进行视频播放.根据Apple docs设置的视频层:
self.player = [IPLPlayer new];
self.player.playerLayer = (AVPlayerLayer *)self.playerView.layer;
Run Code Online (Sandbox Code Playgroud)
self.playerView是那些文档的常用类:
@implementation PlayerView
+ (Class) layerClass {
return [AVPlayerLayer class];
}
- (AVPlayer *)player {
return [(AVPlayerLayer *)[self layer] player];
}
- (void)setPlayer:(AVPlayer *) player {
[(AVPlayerLayer *) [self layer] setPlayer:player];
}
Run Code Online (Sandbox Code Playgroud)
问题是:当关闭应用程序(主页按钮)或阻止屏幕时,视频播放停止,当恢复仅恢复音频播放时,屏幕上的图像仍然是块屏幕之前的图像 - 它是完全静态的并且记录更改帧.
如何在屏幕被阻止后恢复视频播放?
似乎我必须注册通知,并在应用程序变为活动后恢复视频层:
-(void)registerNotification
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(willEnterBackground)
name:UIApplicationWillResignActiveNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didEnterForeground)
name:UIApplicationDidBecomeActiveNotification object:nil];
}
-(void)unregisterNotification
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
-(void)willEnterBackground
{
NSLog(@"willEnterBackground");
[self.playerView willEnterBackground];
}
-(void)didEnterForeground
{
NSLog(@"didEnterForeground");
[self.playerView didEnterForeground];
}
Run Code Online (Sandbox Code Playgroud) 我知道当使用a AVQueuePlayer来播放AVPlayerItem对象列表时,播放器会预先加载队列中的下一个项目,以便在用户到达此项目时更快地重新加载.
问题是我需要更多地控制哪些项目预加载,例如我希望预先加载3首下一首歌曲和2首前一首歌曲并准备快速加载.
所以我想自己管理这些AVPlayerItem对象,我只是不确定如何预加载AVPlayerItem?
例如,我如何预加载前30秒?
我正在研究Swift基础MAC OS-X应用程序.用户将选择一个视频文件,NSView Controller将使用AVPlayerView播放视频.用户可以在AVPlayerView上绘制一个矩形,我已经实现了这个功能.如何将矩形中的选定区域视频显示到摄像机右下方的预览图层?
这是输出:

这是代码:
var videoURL = NSURL() // The video file URL by the file chooser
var videoSize = NSSize() // Here the video resolution size will be kept i.e. 720*480
var player:AVPlayerView! // The AVPlayerView to play video
var cameraPreviewLayer:AVPlayerLayer! //The right bottom camera Preview Layer
var rectangleLayer:AVPlayerLayer! // The rectangle that will draw over AVPlayer while mouse dragging
var isClicked = false
var startPoint = NSPoint() // holds the starting point location …Run Code Online (Sandbox Code Playgroud) 我在一个应用程序上编码,用户可以观看各种各样的视频.我在按钮点击时全屏打开视频,用户可以使用播放控件来调整窗口大小.我遇到的问题是当用户通过热点共享他的互联网时,应用程序顶部有一个蓝色条.此时调整窗口大小会导致AVKit框架崩溃(我相信).使用Swift 2.3,Xcode 7.3.1.我的手机,iPhone 6s,使用iOS 10,我也尝试过iOS 9 iPhone 6 Plus,同样的问题.
碰撞:
Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'child view controller:<AVFullScreenPlaybackControlsViewController: 0x102933000> should have parent view controller:<AVPlayerViewController: 0x10212d800> but actual parent is:<AVFullScreenViewController: 0x10884d900>'
Run Code Online (Sandbox Code Playgroud)
我的代码:
private let playerController = AVPlayerViewController()
private var player: AVPlayer!
private func playVideo(media: Media) {
player = AVPlayer(URL: NSURL(string: media.url)!)
playerController.player = player
presentViewController(playerController, animated: true, completion: {
self.playerController.player?.play()
self.playerController.delegate = self
})
}
Run Code Online (Sandbox Code Playgroud)
如果我不在我的手机上共享我的互联网(因此没有蓝色条),那么它工作正常,没有任何问题.有人设法隐藏这个蓝色条,或遇到类似的问题?
avplayer ×10
ios ×9
swift ×4
avfoundation ×2
iphone ×2
avurlasset ×1
cocoa ×1
hotspot ×1
ios6.0 ×1
macos ×1
objective-c ×1
swift4 ×1
xcode ×1