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

时间:2019-01-15 05:11:56

标签: ios video watchkit movie watch-os

在watchOS应用中播放视频。

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


按预期工作。视频播放。如何缩放以填充屏幕

  1. 情节提要中有一个视觉选项。选择调整外观填充大小会被忽略。

Screenshot of Xcode

  1. 有一个功能:func setVideoGravity(_ videoGravity: WKVideoGravity)
  

电影的调整大小选项。对于列表   可能的值,请参阅WKVideoGravity类型。


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
  

调整内容大小以填充边界   完全保留矩形,同时保留   内容。此选项将裁切视频中的边缘   它超过的轴。

那太完美了。试试吧。


它不起作用。

无论videoGravity(在情节提要或代码中)如何,视频都会播放调整大小以适合,并且只有在我双击时才会填充屏幕。

我想念什么?


另外,如果我使用Media Player选项探索presentMediaPlayerController方法,则会发现一种奇怪的行为:

WKMediaPlayerControllerOptionsAutoplayKey

WKMediaPlayerControllerOptionsStartTimeKey

WKMediaPlayerControllerOptionsVideoGravityKey(失败并恢复为默认行为)

总体而言,它似乎已损坏。如果有人有主意,我将提供解决方法。

2 个答案:

答案 0 :(得分:0)

手表上的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
    }
}

答案 1 :(得分:-1)

您不应以编程方式设置视频重力值。当他们在属性检查器中提供它时。

视频引力设置为调整长宽比

您的属性检查器应如下图所示。

enter image description here

您的代码将如下所示。

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)
}}