标签: avkit

如何禁用默认视频播放器的画中画模式

当用户尝试在我的应用中播放视频时,如何在iPad上使用iOS9中的Swift禁用画中画按钮/模式?

ios swift avkit ios9

2
推荐指数
1
解决办法
2106
查看次数

在 AVPlayerViewController 中将视频旋转 90 度 - 可能吗?

我不知道如何将视频旋转 90 度AVPlayerViewController,有人知道如何做到这一点吗?我不确定如何AVPlayerLayer像往常一样访问。

ios avplayer avplayerlayer avkit avplayerviewcontroller

2
推荐指数
1
解决办法
1280
查看次数

无法使用 AVPlayer 播放 .mp4 视频文件

我正在使用AVPlayer来播放来自 url 的视频。

func playVideoFromUrl(urlString: String){

        let videoURL = URL(string: urlString)
        let player = AVPlayer(url: videoURL!)
        let playerViewController = AVPlayerViewController()
        playerViewController.player = player

        let delegate : AppDelegate = UIApplication.shared.delegate as! AppDelegate
        delegate.window?.rootViewController?.present(playerViewController, animated: true) {
            playerViewController.player!.play()
        }
    }
Run Code Online (Sandbox Code Playgroud)

url of video: - “ http://gsn-input-dev.s3.amazonaws.com/public/video/00229/9229d4ad2a0c547e7bfa51e3fbef806f.mp4

我没有在控制台收到任何警告。下面是模拟器的截图。我做错了什么?

在此处输入图片说明

avfoundation ios avplayer avkit avplayerviewcontroller

2
推荐指数
1
解决办法
3475
查看次数

ReplayKit:RPScreenRecorder.shared().startCapture() 不工作

ReplayKit最近真的让我很沮丧。因为某些原因

RPScreenRecorder.shared().startCapture(handler: { (sample, bufferType, error) in
Run Code Online (Sandbox Code Playgroud)

当我调用它时实际上不起作用,因为我在其中有一个print()语句并且它从未被调用过。

我的代码ViewController是:

import UIKit
import AVFoundation
import SpriteKit
import ReplayKit
import AVKit

class ViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, RPPreviewViewControllerDelegate {

    var assetWriter:AVAssetWriter!
    var videoInput:AVAssetWriterInput!

func startRecording(withFileName fileName: String) {
        if #available(iOS 11.0, *)
        {

            assetWriter = try! AVAssetWriter(outputURL: fileURL, fileType:
                AVFileType.mp4)
            let videoOutputSettings: Dictionary<String, Any> = [
                AVVideoCodecKey : AVVideoCodecType.h264,
                AVVideoWidthKey : UIScreen.main.bounds.size.width,
                AVVideoHeightKey : UIScreen.main.bounds.size.height
            ];

            videoInput  = AVAssetWriterInput (mediaType: AVMediaType.video, outputSettings: videoOutputSettings)
            videoInput.expectsMediaDataInRealTime = true
            assetWriter.add(videoInput) …
Run Code Online (Sandbox Code Playgroud)

avfoundation video-recording swift avkit replaykit

2
推荐指数
1
解决办法
2486
查看次数

SwiftUI macOS VideoPlayer 仅在 Notarized(分布式)应用程序中查看崩溃

简而言之,我的 macOS 应用程序纯粹用 SwiftUI 编写,使用 VideoPlayer 来呈现本地存储的视频(未捆绑)。相关代码如下:

import SwiftUI
import AVKit

struct CustomizedPlayerView: View {
    @State var player: AVPlayer?

    var body: some View {
        VStack {
            if let avPlayer = self.player {
                VideoPlayer(player: avPlayer).frame(minWidth: 320, minHeight: 320)
            }
            Text("Problematic VideoPlayer View")
        }
    }
}

Run Code Online (Sandbox Code Playgroud)

在 Xcode 中进行开发构建时,没有任何问题(没有崩溃,没有播放问题)。

但是,在经过公证的应用程序中打开视图会导致整个应用程序崩溃并显示Exception Type: EXC_CRASH (SIGABRT). 这向我发出信号,系统正在中止我的应用程序,因为零值的分配不正确,但播放器似乎在崩溃时传递了一个非零值。

经过一番调试和研究后我发现了这个问题。我想分享对我有用的方法,并希望它能节省别人的时间。

video-player avkit swiftui

2
推荐指数
1
解决办法
321
查看次数

关闭 AVPictureInPictureController

根据文档,当 AVPictureInPictureController 关闭时,将调用 willStop 和 didStop 委托方法以及restoreUserInterfaceForPictureInPictureStopWithCompletionHandler,无论它是如何关闭的。如何判断控制器是通过“X”按钮还是其他按钮关闭以返回常规播放?

ios avkit

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

iOS - 在 AVKit obj-c 中使用 AVPlayerViewController

我正在尝试更新这个已弃用的方法:“presentMoviePlayerViewControllerAnimated”,但是我无法导入 AVKit 并使用 AVPlayerViewContoller。似乎我的 Xcode 没有以某种方式看到这个框架。

这是我的代码:

比赛详情VC.m

   -(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath (NSIndexPath *)indexPath {
YoutubeVideoModel* video = [_videos objectAtIndex:indexPath.row];

XCDYouTubeVideoPlayerViewController *videoPlayerViewController = [[XCDYouTubeVideoPlayerViewController alloc] initWithVideoIdentifier:video.videoID];
   =>[self presentMoviePlayerViewControllerAnimated:videoPlayerViewController];
Run Code Online (Sandbox Code Playgroud)

无法访问 AVKit 文件: 使用 CM + 单击

MatchDetalisVC.m更新

[self presentViewController:videoPlayerViewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

用这个更改了最后一行。没有错误。看来我也不必在我的 ViewController 中 #import AVKit 。是正确的吗?

objective-c ios avplayer avkit avplayerviewcontroller

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

AVPlayerLooper 不循环我的本地视频

我正在尝试让视频在我的 macOS 项目中播放,并且希望它不断循环。我能够让它播放一次,但我不知道如何让它循环播放。我正在使用 AVPlayerLooper 但似乎在某个地方搞砸了。这是我的代码:

import Cocoa
import AVKit
import AVFoundation

class ViewController: NSViewController {

    @IBOutlet weak var videoPlayer: AVPlayerView!

    override func viewDidLoad() {
        //var loop: AVPlayerLooper?

        super.viewDidLoad()

        guard let path = Bundle.main.path(forResource: "Background", ofType:"mp4") else {
            debugPrint("Not found")
            return
        }

        let asset = AVAsset(url: URL(fileURLWithPath: path))
        let item = AVPlayerItem(asset: asset)
        let queuePlayer = AVQueuePlayer(playerItem: item)
        let loop = AVPlayerLooper(player: queuePlayer, templateItem: item)
        videoPlayer.player = queuePlayer
        videoPlayer.player?.play()
    }
}
Run Code Online (Sandbox Code Playgroud)

我的故事板中还有一个 AVPlayerView,我已将其连接到我的视图控制器。

它构建并运行良好,但当我运行它时,什么也没有显示。我只是遇到黑屏。

任何帮助表示赞赏。谢谢!

macos avfoundation ios swift avkit

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

设置 AVCaptureSession 时 availableMetadataObjectTypes 中的空数组

我想配置一个带有扫描二维码的相机。但是当尝试添加支持的元数据类型时,我发现数组为availableMetadataObjectTypes空。

我最终得到了这段代码:

private var captureDevice: AVCaptureDevice? {
    return AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back)
}

private var input: AVCaptureDeviceInput? {
    guard AVCaptureDevice.authorizationStatus(for: .video) == .authorized else { return nil }
    guard let device = captureDevice else { return nil }
    return try? AVCaptureDeviceInput(device: device)
}

private var output: AVCaptureMetadataOutput? {
    let output = AVCaptureMetadataOutput()
    print(output.availableMetadataObjectTypes)
    output.setMetadataObjectsDelegate(delegate, queue: .global(qos: .userInitiated))
    return output
}
Run Code Online (Sandbox Code Playgroud)

这部分代码使用输入和输出配置会话:

let session = AVCaptureSession()

session.beginConfiguration()
session.sessionPreset = .high
if let input = input, session.canAddInput(input) { session.addInput(input) …
Run Code Online (Sandbox Code Playgroud)

avfoundation swift avkit

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

减少使用AVAssetExportSession导出的视频的大小-iOS Swift

我目前以以下方式导出视频:

   let exporter = AVAssetExportSession.init(asset: mixComposition, presetName: AVAssetExportPreset1280x720)
   exporter?.outputURL = outputPath
   exporter?.outputFileType = AVFileType.mp4
   exporter?.shouldOptimizeForNetworkUse = true
   exporter?.videoComposition = mainCompositionInst
Run Code Online (Sandbox Code Playgroud)

15秒的视频消耗约20MB的数据。与Snapchat的2MB视频相比,这个数字似乎是完全不能接受的。

我已经降低了导出和捕获会话的质量(1280x720)。

该视频在自定义相机上拍摄。UIImagePickerController未使用。

AVAssetExportSession与默认设置一起使用。

有什么办法可以减小视频尺寸?非常感谢!

编辑1: 我尝试使用此库:https : //cocoapods.org/pods/NextLevelSessionExporter

不幸的是,这会造成尺寸问题,并删除了我的音频:

// Creating exporter
    let exporter = NextLevelSessionExporter(withAsset: mixComposition)
    exporter.outputURL = outputPath
    exporter.outputFileType = AVFileType.mp4
    exporter.videoComposition = mainCompositionInst

    let compressionDict: [String: Any] = [
        AVVideoAverageBitRateKey: NSNumber(integerLiteral: 2500000),
        AVVideoProfileLevelKey: AVVideoProfileLevelH264BaselineAutoLevel as String,
        ]

        exporter.videoOutputConfiguration = [
            AVVideoCodecKey: AVVideoCodecType.h264,
            AVVideoWidthKey: NSNumber(integerLiteral: 1280),
            AVVideoHeightKey: NSNumber(integerLiteral: 720),
            AVVideoScalingModeKey: AVVideoScalingModeResizeAspectFill,
            AVVideoCompressionPropertiesKey: compressionDict
        ] …
Run Code Online (Sandbox Code Playgroud)

avfoundation avassetexportsession swift avkit ios11

0
推荐指数
2
解决办法
1645
查看次数

使用多个 AVPlayer 时如何检测哪个视频结束?

我在屏幕上并排播放两个视频,所以我有两个 AVPlayer 实例。我正在使用工作正常的通知检测视频播放结束。我的选择器(playerDidFinishPlaying)在两个视频结束时都被调用。

NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: .AVPlayerItemDidPlayToEndTime, object: nil) 
Run Code Online (Sandbox Code Playgroud)

现在我的问题出在选择器(playerDidFinishPlaying)中,我想检测它调用了哪个 avplayer?如何唯一识别视频结束的 AVPlayer?

ios avplayer swift avplayeritem avkit

0
推荐指数
1
解决办法
609
查看次数

AVSampleBufferDisplayLayer 中的画中画未加载

我正在尝试为我的 iOS 应用程序支持画中画,并且我需要显示视图的内容,而不是视频。因此,我尝试使用库来记录视图并以AVSampleBufferDisplayLayer. 它有效,视图的内容显示在缓冲区显示层中,但是当我尝试使用 PIP 时,只显示加载指示器。这是我的代码:

import UIKit
import AVKit

class View: UIView {
    
    override class var layerClass: AnyClass {
        AVSampleBufferDisplayLayer.self
    }
}

class ViewController: UIViewController, AVPictureInPictureSampleBufferPlaybackDelegate {
    
    func pictureInPictureController(_ pictureInPictureController: AVPictureInPictureController, setPlaying playing: Bool) {
        
    }
    
    func pictureInPictureControllerTimeRangeForPlayback(_ pictureInPictureController: AVPictureInPictureController) -> CMTimeRange {
        .init(start: .zero, duration: self.buffers.first?.duration ?? .indefinite)
    }
    
    func pictureInPictureControllerIsPlaybackPaused(_ pictureInPictureController: AVPictureInPictureController) -> Bool {
        false
    }
    
    func pictureInPictureController(_ pictureInPictureController: AVPictureInPictureController, didTransitionToRenderSize newRenderSize: CMVideoDimensions) {
        
    }
    
    func pictureInPictureController(_ pictureInPictureController: AVPictureInPictureController, skipByInterval skipInterval: CMTime, completion completionHandler: …
Run Code Online (Sandbox Code Playgroud)

uikit ios swift avkit

0
推荐指数
1
解决办法
1712
查看次数