gpt4 book ai didi

ios - 如何使用 resizeAspectFill 在 watchOS 上播放视频?

转载 作者:可可西里 更新时间:2023-11-01 03:35:15 26 4
gpt4 key购买 nike

在 watchOS 应用中播放视频。

WKInterfaceMovie — 一个界面元素,可让您在 watchOS 应用程序中播放视频和音频内容。


按预期工作。视频播放。如何将它缩放到填满屏幕

  1. Storyboard中有一个视觉选项。选择 Resize Aspect Fill 将被忽略。

Screenshot of Xcode

  1. 有一个函数:func setVideoGravity(_ videoGravity: WKVideoGravity)

The resizing option for the movie. For a list of possible values, see the WKVideoGravity type.


import WatchKit
import Foundation

class InterfaceController: WKInterfaceController {
@IBOutlet weak var movieView: WKInterfaceMovie!

override func awake(withContext context: Any?) {
super.awake(withContext: context)

setupVideoPlayer()
}

func setupVideoPlayer() {
guard let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4") else {
return
}

movieView.setMovieURL(videoURL)
movieView.setVideoGravity(.resizeAspectFill)
}
}

Xcode 中的基本设置。视频在点击播放按钮时加载。加载后播放。不填满屏幕。


WKVideoGravity

指示视频内容外观的常量。

case resizeAspectFill

Content is resized to fill the bounds rectangle completely while preserving the original aspect ratio of the content. This option results in cropping of the edges of the video in the axis it exceeds.

太完美了。让我们试试吧。


这行不通。

无论 videoGravity(在 Storyboard或代码中)如何,视频都会调整大小以适应并且只有在我双击时才会填满屏幕。

我错过了什么?


此外,如果我使用媒体播放器选项探索 presentMediaPlayerController 方法,我会注意到一个奇怪的行为:

WKMediaPlayerControllerOptionsAutoplayKey

WKMediaPlayerControllerOptionsStartTimeKey

WKMediaPlayerControllerOptionsVideoGravityKey 🚫(失败并回退到默认行为)

总的来说,它似乎坏了。如果有人有想法,我希望有一个解决方法。

最佳答案

watch 上的 Apple API 有问题,这显然行不通,如果您愿意,可以打开雷达。

另一种方法是使用 WKInterfaceInlineMovie 吗?您可以使用所需的宽高比(使用 ffmpeg 或其他工具)格式化您的视频,请参阅从 Apple 样本修改的代码 here .

class MovieDetailController: WKInterfaceController {
@IBOutlet var inlineMovie :WKInterfaceInlineMovie!
@IBOutlet var tapGestureRecognizer :WKTapGestureRecognizer!
var playingInlineMovie :Bool = false

override func awake(withContext context: Any?) {
super.awake(withContext: context)

// Setup the `inlineMovie` interface object with the URL to play.
inlineMovie.setMovieURL(movieURL!)

// Provide a poster image to be displayed in the inlineMovie interface object prior to playback.
inlineMovie.setPosterImage(WKImage (imageName: "Ski1"))
inlineMovie.setVideoGravity(.resize)

// Movie playback starts
playingInlineMovie = false
}

@IBAction func inlineMovieTapped(sender : AnyObject) {
if playingInlineMovie == false {
inlineMovie.play()
} else {
inlineMovie.pause()
}

playingInlineMovie = !playingInlineMovie
}
}

关于ios - 如何使用 resizeAspectFill 在 watchOS 上播放视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54192987/

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