gpt4 book ai didi

avplayer - 如何使用 SwiftUI 在 VStack 中显示我的 AVPlayer

转载 作者:行者123 更新时间:2023-12-03 06:42:06 30 4
gpt4 key购买 nike

我创建了一个简单的 AVPlayer。 (如果我没有正确创建它,请帮我修复它...😀)我想用 swift ui 在我的 VStack 中显示它,但我有点卡住了...

如果库里至少有AVPlayer View组件就更容易了,但是我在库里没有找到它......😔

这是我在 ContentView.swift 中的代码:

//
// ContentView.swift
// test
//
// Created by Francis Dolbec on 2019-06-26.
// Copyright © 2019 Francis Dolbec. All rights reserved.
//

import SwiftUI
import AVKit
import AVFoundation

// MARK: variables
var hauteurMenuBar = NSApplication.shared.mainMenu?.menuBarHeight
var urlVideo = URL(string: "/Users/francisdolbec/Movies/Séries Télé/Rick et Morty/Rick.and.Morty.S01E01.VFQ.HDTV.1080p.x264-Kamek.mp4")
let player = AVPlayer(url: urlVideo!)


struct ContentView : View {
var body: some View {

VStack {
Text("Hello World")
.frame(maxWidth: .infinity, maxHeight: .infinity)
Text("PATATE!")
//player.play()
}

.frame(minWidth: 1024, idealWidth: 1440, maxWidth: .infinity, minHeight: (640-hauteurMenuBar!), idealHeight: (900-hauteurMenuBar!), maxHeight: .infinity)

}
}


#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif

顺便说一句,如果有一个教程展示如何使用 swift ui 制作视频播放器,我将非常感激!

编辑我忘了说我正在开发一个 ma​​cOS 应用程序。

最佳答案

当然,这是教程,作者:Chris Mash on Medium .

基本上,您可以将 AVPlayerLayer 嵌入到符合 UIViewRepresentable 的结构中,您可以对要使用的任何 UIView 组件执行此操作SwiftUI。

struct PlayerView: UIViewRepresentable {
func updateUIView(_ uiView: UIView, context: UIViewRepresentableContext<PlayerView>) {
}

func makeUIView(context: Context) -> UIView {
return PlayerUIView(frame: .zero)
}
}

实现的“核心”是在 PlayerUIView 类中完成的:

class PlayerUIView: UIView {
private let playerLayer = AVPlayerLayer()

override init(frame: CGRect) {
super.init(frame: frame)

let url = URL(string: "https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8")!
let player = AVPlayer(url: url)
player.play()

playerLayer.player = player
layer.addSublayer(playerLayer)
}

required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

override func layoutSubviews() {
super.layoutSubviews()
playerLayer.frame = bounds
}
}

然后你像这样使用它:

var body: some View {
PlayerView()
}

关于avplayer - 如何使用 SwiftUI 在 VStack 中显示我的 AVPlayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56822943/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com