我使用AVPlayerViewController的AVKit框架,直接在横向模式下播放视频。我想知道如何显示字幕。我进行了搜索,但没有找到任何解决方案。我曾经MPMoviePlayerViewController用来播放视频,但是由于它在IOS 9和更高版本中已贬值,因此我正在使用来实现相同的功能AVKit。
NSURL *videoURL = [NSURL URLWithString:video.videoLink];
AVPlayer *newPlayer = [AVPlayer playerWithURL:videoURL];
AVPlayerViewController *playerViewController = [AVPlayerViewController new];
playerViewController.player = newPlayer;
int32_t timeScale = newPlayer.currentItem.asset.duration.timescale;
CMTime seektime=CMTimeMakeWithSeconds(startPlayBackTime, timeScale);
[playerViewController.player seekToTime:seektime toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];
}
[playerViewController.player play];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:[newPlayer currentItem]];
playerViewController.player.closedCaptionDisplayEnabled = YES;
[self presentViewController:playerViewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
它工作正常,但问题是我无法显示字幕。我发现很少有字幕示例,但所有示例都AVPlayer用作子视图,因此这些方法对我不起作用。
知道如何实现吗?
谢谢 !!
我正在尝试将内联视频添加到我的UITableViewCells,包括Instagram,Twitter,Vine ......等.我正在使用AVPlayerController和自定义单元格测试带有本地视频文件的UI(请参阅下面的示例代码).我等待AVPlayer的状态为ReadyToPlay,然后播放视频.
问题是当在tableView上滚动时,只要加载视频单元,UI就会冻结一小部分,这使得应用看起来很笨重.当一行中有多个视频单元时,这种效果会变得更糟.任何想法和帮助将不胜感激
TableView代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("videoCell", forIndexPath: indexPath) as! CustomCell
//Set up video player if cell doesn't already have one
if(cell.videoPlayerController == nil){
cell.videoPlayerController = AVPlayerViewController()
cell.videoPlayerController.view.frame.size.width = cell.mediaView.frame.width
cell.videoPlayerController.view.frame.size.height = cell.mediaView.frame.height
cell.videoPlayerController.view.center = cell.mediaView.center
cell.mediaView.addSubview(cell.videoPlayerController.view)
}
//Remove old observers on cell.videoPlayer if they exist
if(cell.videoObserverSet){
cell.videoPlayer.removeObserver(cell, forKeyPath: "status")
}
let localVideoUrl: NSURL = NSBundle.mainBundle().URLForResource("videoTest", withExtension: "m4v")!
cell.videoPlayer = AVPlayer(URL:localVideoUrl)
cell.videoPlayer.addObserver(cell, forKeyPath:"status", options:NSKeyValueObservingOptions.New, context = nil)
cell.videoObserverSet = true …Run Code Online (Sandbox Code Playgroud) objective-c uitableview avplayer swift avplayerviewcontroller
我在我的应用程序中使用AVPlayer播放视频.
在我的应用程序中,我添加了播放下一个/上一个视频的功能,所以如何设置空缓冲区.
所以,如果有人有解决方案可以帮助我.
objective-c ios avplayer avplayeritem avplayerviewcontroller
我有一个根视图控制器来管理其中的所有其他控制器,因此我在上述rootViewController中覆盖了shouldAutorotate和supportedInterfaceOrientations,如下所示:
public override func shouldAutorotate() -> Bool {
if let vc = view.window?.rootViewController?.presentedViewController {
if NSStringFromClass(vc.classForCoder) == "AVFullScreenViewController" {
return true
}
}
return false
}
public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
if let vc = view.window?.rootViewController?.presentedViewController {
if NSStringFromClass(vc.classForCoder) == "AVFullScreenViewController" {
return UIInterfaceOrientationMask.AllButUpsideDown
}
}
return UIInterfaceOrientationMask.Portrait
}
Run Code Online (Sandbox Code Playgroud)
除了使用AVPlayerViewController查看全屏视频时,我的应用程序仅是纵向模式。
上面的代码在整个应用程序中运行良好。我所有的控制器及其视图均保持竖向显示,当用户全屏观看视频时,它会毫无问题地旋转为横向。
我的问题是,纵向模式下的状态栏未粘附在方向蒙版上并旋转为横向,但是状态栏随后隐藏在横向中。另一个奇怪的事情是,当应用程序处于横向模式时,现在可以将控制中心和通知中心滑动为打开状态,就像应用程序处于横向模式一样。
支持的最低iOS版本为9.0。有什么建议么?
更新:该问题与AVPlayerControllerView无关,请参阅下面的答案.班级的名字AVTouchIgnoringView在一开始就让我困惑,但这也是思考问题的错误途径.
===
众所周知,Media Player在iOS 9中不推荐使用框架,因此我决定尝试AVKit在我的新项目中使用.我的任务是显示嵌入在集合视图'header(UICollectionReusableView)中的视频播放器,下面有一些任意单元格.
这是我在代码中这样做的方式:
override func viewDidLoad() {
super.viewDidLoad()
apiManager.loadVideo() { video in
let player = AVPlayer(URL: video.url)
self.playerViewController.view.hidden = true
self.playerViewController.player = player
self.addChildViewController(self.playerViewController)
headerView.videoContainerView.addSubview(self.playerViewController.view)
Cartography.layout(self.playerViewController.view,
headerView.videoContainerView) { (v1, v2) in
v1.leading == v2.leading
v1.bottom == v2.bottom
v1.trailing == v2.trailing
v1.top == v2.top
}
self.playerViewController.didMoveToParentViewController(self)
self.playerViewController.addObserver(self,
forKeyPath: KeyPath.ReadyForDisplay, options: nil, context: nil)
}
}
override func observeValueForKeyPath(keyPath: String,
ofObject object: AnyObject, change: [NSObject : AnyObject],
context: UnsafeMutablePointer<Void>) {
if …Run Code Online (Sandbox Code Playgroud) 播放音频时是否可以更改AVPlayerViewController实例的背景?
当我锁定我的设备时,我可以看到正确显示专辑图片的音乐控件,但是当我的应用程序中显示AVPlayerViewController时,我只能看到具有代表当前正在播放的QuickTime的背景的控件.
以下是我的称呼方式:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
NSURL *url=[NSURL fileURLWithPath:clickedPath];
AVPlayer *player = [AVPlayer playerWithURL:url];
AVPlayerViewController *controller = [[AVPlayerViewController alloc] init];
[self presentViewController:controller animated:YES completion:nil];
controller.player = player;
[player play];
Run Code Online (Sandbox Code Playgroud) 我正在开发一个仅在纵向模式下的 iOS 应用程序,并且运行良好。
问题是我在 navigationController 之上呈现AVPlayerViewController(两者都是以编程方式创建的)。该播放器支持所有轮换(我不知道为什么!)。
我想将其修复为纵向模式,就像应用程序的其他部分一样。
我们怎样才能做到这一点?
有没有办法替换AVPlayer缩略图?我需要添加自定义图像作为缩略图层
我正在构建一个屏幕,用户可以在其中使用 AVPlayerViewController 播放音频文件。问题是我无法去掉播放器视图中的 QuickTime 徽标,请参见屏幕截图:
我的代码:
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
guard let url = URL(string: filePath!) else {
return
}
let player = AVPlayer(url: url)
let controller = AVPlayerViewController()
controller.modalPresentationStyle = .overFullScreen
controller.player = player
self.present(controller, animated: true) {
player.play()
}
} catch {
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用 添加 UIImageView controller.contentOverlayView?.addSubView(),但无法正确居中。如何自定义播放器的布局,而无需从头开始构建自己的界面?
从表视图单元格中,我播放来自 url 的视频:
let player = AVPlayer(url: URL(string: "https://bitdash-a.akamaihd.net/content/MI201109210084_1/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8")!)
player.automaticallyWaitsToMinimizeStalling = false
let vc = AVPlayerViewController()
vc.player = player
// Loop video
NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: player.currentItem, queue: .main) { [weak self] _ in
player.seek(to: CMTime.zero)
player.play()
}
self.parentViewController.present(vc, animated: true, completion: {
if #available(iOS 10.0, *) {
vc.player?.playImmediately(atRate: 1.0)
} else {
vc.player?.play()
}
})
Run Code Online (Sandbox Code Playgroud)
如何检测何时AVPlayerViewController关闭/解除?我想在关门的时候做点什么。
ios ×8
avplayer ×5
swift ×5
objective-c ×4
avkit ×2
autorotate ×1
avfoundation ×1
avplayeritem ×1
rotation ×1
uitableview ×1