标签: avkit

如何在Swift中使用AVPlayerViewController(AVKit)播放视频

如何在Swift中使用AV Kit Player View Controller播放视频?

override func viewDidLoad() {
        super.viewDidLoad()
        let videoURLWithPath = "http://****/5.m3u8"
        let videoURL = NSURL(string: videoURLWithPath)
        playerViewController = AVPlayerViewController()

        dispatch_async(dispatch_get_main_queue()) {
            self.playerViewController?.player = AVPlayer.playerWithURL(videoURL) as AVPlayer
        }
    }
Run Code Online (Sandbox Code Playgroud)

avfoundation ios swift avkit avplayerviewcontroller

154
推荐指数
8
解决办法
18万
查看次数

在 SceneKit 中播放视频的最佳方式是什么?

我尝试了多种不同的技术在 SceneKit 中播放视频,但似乎都无法正常工作。

我尝试将 AVPlayerLayer 分配给 SCNMaterial.diffuse.contents ,但根本无法显示任何视频帧,尽管声音播放得很好。

我还尝试将包含 SKVideoNode 子节点的 SpriteKite SKScene 分配给 SCNMaterial.diffuse.contents,并且效果很好,尽管(正如 StackOverflow 上的其他人指出的)每次播放视频时都会泄漏兆字节的内存,直到最后 iOS杀死应用程序。

最后,由于它现在在 iOS 11.0+ 中受支持并受到 @mnuages 和其他人的推荐,我尝试将 AVPlayer 直接分配给 SCNMaterial.diffuse.contents ,虽然它可以播放并且不会泄漏内存,但不幸的是它有很多糟糕的视觉效果(即使在 iOS 12.1.2 上)。特别是,正如其他开发人员所指出的,每次将 AVPlayer 实例分配给材质并开始播放时,SceneKit 都会多次将以下内容记录到控制台:

[SceneKit] 错误:无法获取像素缓冲区 (CVPixelBufferRef)

日志消息可能是可接受的,但每次出现错误时,场景中的视频帧都会显示为全白色,这会导致每次播放新视频时闪烁几分之一秒。

这种技术的一个更糟糕的视觉伪影是我所说的“迷幻彩虹”效果,它会在 AVPlayer 分配给材质时随机向相邻节点添加闪闪发光的颜色噪声图案(无论它是在播放还是暂停)。它看起来有点酷(请参阅随附的屏幕截图),但并不完全是我们想要的应用程序。

有谁知道如何使这些技术之一可靠地工作?

这是我用来测试将 AVPlayer 直接分配给材质的一些代码:

class GameViewController: UIViewController {

var plane: SCNPlane!
var planeNode: SCNNode!
var playerObserver: NSKeyValueObservation?
var playerCompletionObserver: NSObjectProtocol?

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    guard let scnView = self.view as? SCNView else …
Run Code Online (Sandbox Code Playgroud)

ios scenekit avkit arkit

10
推荐指数
1
解决办法
1630
查看次数

使用AVPlayer播放流媒体视频

你如何播放流媒体视频AVPlayer

import Cocoa
import AVKit

class StreamViewController: NSViewController {
    var videoPlayer: AVPlayer!

    @IBOutlet weak var moviePlayerView: AVPlayerView!

    override func viewDidLoad() {
        super.viewDidLoad()        
    }

    override func viewWillAppear() {
        super.viewWillAppear()
    }

    override func viewDidAppear() {
        super.viewDidAppear()
        openStream()
    }

    func openStream() {
        completeOpenStream { (done) -> (Void) in
            if done {
                print("done!")
            }
        }
    }

    func completeOpenStream(completionHandler: @escaping (Bool) -> (Void)) -> Void  {
        DispatchQueue.global().async() {
            let urlString = "http://samples.mplayerhq.hu/V-codecs/h264/interlaced_crop.mp4" // You can open it with QuickTime.
            let url = URL(fileURLWithPath: …
Run Code Online (Sandbox Code Playgroud)

macos ios avplayer swift avkit

8
推荐指数
1
解决办法
5199
查看次数

无法从 AVURLAsset 获取 AVPlayer 的 HLS 视频(.m3u8 格式)的视频轨道?

我正在开发一个自定义视频播放器来从服务器流式传输 HLS 视频。我可以使用 AVPlayerItem 和 AVPlayer 成功播放 HLS 视频。

之后我想为我的视频播放器添加字幕轨道和音轨。所以我使用 AVMutableComposition 来做到这一点。所以现在的问题是,当我为 HLS 视频创建 AVURLAsset 时,我无法从 AVURLAsset 获取视频轨道。它总是给我 0 个曲目。我尝试了 AVURLAsset 的“loadValuesAsynchronously”,并尝试为 AVPlayerItem 的“轨道”添加 KVO。但这些都没有给我带来任何积极的结果。

我正在使用以下代码。

  func playVideo() {
    let videoAsset = AVURLAsset(url: videoURL!)
    let composition = AVMutableComposition()
    // Video
    let videoTrack = composition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
    do {
        let tracks = videoAsset.tracks(withMediaType: .video)
        guard let track = tracks.first else {
            print("Can't get first video track")
            return
        }
        try videoTrack?.insertTimeRange(CMTimeRangeMake(kCMTimeZero, videoAsset.duration), of: track, at: kCMTimeZero)
    } catch {
        print(error)
        return …
Run Code Online (Sandbox Code Playgroud)

avfoundation avplayer m3u8 swift avkit

8
推荐指数
1
解决办法
2137
查看次数

iOS 16 中删除了 AVPlayerViewController 播放图标

在以前版本的 iOS 中,使用视频加载 AVPlayerViewController(以及 SwiftUI VideoPlayer)将显示第一帧并在中心包含一个播放图标,但这在 iOS 16 中已消失。我一直依赖该 UI 元素作为“这里有一个视频,点击它”的可见性。

另外,现在点击视频会显示视频的播放控件几秒钟,而不仅仅是开始播放。

有谁知道是否:

  • 有一个属性或配置选项可以显示播放图标吗?
  • 我应该手动提供放置在视频上的自己的播放图标叠加层吗?
  • 这是iOS 16的一个bug吗?

iOS 15.5 模拟器带有播放图标,iOS 16 缺少播放图标

uikit ios swift avkit swiftui

8
推荐指数
1
解决办法
1326
查看次数

AVPlayerViewController使用纯音频AVPlayer

刚开始使用AVKit,我正在尝试播放一些音频.使用Mastering Modern Media Playback中详细介绍的新AVPlayerViewController会很不错,这样我就可以使用现成的播放/暂停/搜索UI.我基本上有一个带有容器视图的故事板,它有一个嵌入到AVPlayerViewController的segue.然后我用:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "embedAudio") {
        var playerViewController:AVPlayerViewController = segue.destinationViewController as AVPlayerViewController

        playerViewController.player = AVPlayer(URL: NSURL(string: "http://dts.podtrac.com/redirect.mp3/files.serialpodcast.org/sites/default/files/podcast/1420057326/serial-s01-e01.mp3"))
    }
}
Run Code Online (Sandbox Code Playgroud)

它很好地嵌入并播放,但它有一个大的黑色QuickTime符号,视频将在其中.我想知道是否有办法让它看起来更像是音乐或播客应用程序.

audio avfoundation ios swift avkit

7
推荐指数
2
解决办法
3437
查看次数

致命异常:UIViewControllerHierarchyInconsistency child viewcntrler <AVFullScreenPlaybackControlsViewController:应该有父视图控制器

我在我的实时应用程序中遇到崩溃.在这里发布Crashlytics的崩溃报告.你能指导我这个吗?

Fatal Exception: UIViewControllerHierarchyInconsistency child view controller:<AVFullScreenPlaybackControlsViewController:> should have parent view controller:<MyAVPlayerViewController:> but actual parent is:<AVFullScreenViewController:>

Fatal Exception: UIViewControllerHierarchyInconsistency



Fatal Exception: UIViewControllerHierarchyInconsistency
    0  CoreFoundation                 0x181616db0 __exceptionPreprocess
    1  libobjc.A.dylib                0x180c7bf80 objc_exception_throw
    2  CoreFoundation                 0x181616cf8 -[NSException initWithCoder:]
    3  UIKit                          0x1867f5010 -[UIView(Hierarchy) _associatedViewControllerForwardsAppearanceCallbacks:performHierarchyCheck:isRoot:]
    4  UIKit                          0x18677cdbc -[UIView(Hierarchy) _willMoveToWindow:withAncestorView:]
    5  UIKit                          0x18677c13c -[UIView(Internal) _addSubview:positioned:relativeTo:]
    6  AVKit                          0x18cab3860 -[AVPlayerViewController _updatePlaybackControlsViewController]
    7  AVKit                          0x18cab20e4 -[AVPlayerViewController observeValueForKeyPath:ofObject:change:context:]
    8  Foundation                     0x181f37d84 -[NSKeyValueObservance observeValueForKeyPath:ofObject:change:context:]
    9  Foundation                     0x181f13f64 NSKeyValueNotifyObserver
    10 Foundation                     0x181f13a8c NSKeyValueDidChange
    11 Foundation                     0x181efe624 -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:]
    12 AVKit …
Run Code Online (Sandbox Code Playgroud)

runtime-error objective-c ios avkit

7
推荐指数
0
解决办法
719
查看次数

在 SwiftUI 视图中嵌入视频

我的主要目标是使用 SwiftUI 在 HStack/VStack 的视图中嵌入 GIF/MP4 文件。我了解代码需要符合“可表示”协议。我第一次尝试这样做如下:

import SwiftUI
import AVKit

struct GIF : UIViewControllerRepresentable {

    let url_name: String

    func makeUIViewController(context: UIViewControllerRepresentableContext<GIF>) -> AVPlayerViewController {
        return AVPlayerViewController()
    }

    func updateUIViewController(_ uiViewController: AVPlayerViewController, context: UIViewControllerRepresentableContext<GIF>) {
        let url = URL(string: url_name)!
        let player = AVPlayer(url: url)
        let vc = AVPlayerViewController()
        vc.player = player
//PROBLEM
        self.present(vc, animated: true){
            vc.player?.play()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是我认为“自我”在这里没有任何意义,我们需要引用一个视图。我们将如何做到这一点?我们不能只在故事板中创建视图,因为我想将视图控制器与 SwiftUI 集成。

任何帮助,将不胜感激。

PS 这是我的第一个 iOS 应用程序,所以如果我在这里遗漏了一些非常明显的东西,请尽量保持友善!

uikit swift avkit swiftui

7
推荐指数
1
解决办法
2804
查看次数

如何在 macOS 上使用 SwiftUI 隐藏视频播放器上的按钮?

VideoPlayer(player: AVPlayer(url: URL(fileURLWithPath: Bundle.main.path(forResource: "*****", ofType: "mp4")!)))
Run Code Online (Sandbox Code Playgroud)

如何隐藏视频播放器上的按钮。我希望视频能够不断重复。您可以通过导入 AVKit 库来访问 VideoPlayer 对象。

import AVKit
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

avplayer video-player avkit swiftui

7
推荐指数
1
解决办法
9347
查看次数

VideoPlayer 视图可防止 SwiftUI 导航栏隐藏

VideoPlayer当我将view 放入NavigationView的父视图或子视图中时,就会出现问题。在此示例中,子视图将显示导航栏:

struct ParentView: View {
  var body: some View {
    NavigationView {
      VStack {
        Text("Parent View")

        NavigationLink(destination: ChildView().navigationBarHidden(true)) {
          Text("Child View")
        }
      }
      .navigationBarHidden(true)
    }
  }
}

struct ChildView: View {
  var body: some View {
    VStack {
      Text("Child View")
      VideoPlayer(player: AVPlayer())
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

navigationbar avkit navigationview swiftui swiftui-navigationlink

7
推荐指数
1
解决办法
1128
查看次数