首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SwiftUi如何从项标识符加载选定的视频

SwiftUi如何从项标识符加载选定的视频
EN

Stack Overflow用户
提问于 2022-10-25 18:29:05
回答 1查看 93关注 0票数 0

我是Swift的新手,在SwiftUI 4.0中使用了新的SwiftUI。我能够显示选定的图像,但不能显示视频。当我选择一个视频时,我可以得到如下几条信息

Optional("40F724uF-24M7-4523-9B2B-AD43FB2C7D71/L0/001"),PhotosPickerItem(_itemIdentifier:_itemIdentifier _shouldExposeItemIdentifier: false,_supportedContentTypes:<_UTCoreType 0x106c4cd60> com.apple.Quicktime-_itemIdentifier(非动态,已声明),_itemProvider: {type=(“com.apple.Quicktime-PhotosPickerItem”)})

我想知道是否有某种方式,我可以使用该项目标识符,以加载选定的视频。我一直在看不同的例子,但没有一个为PhotosPicker播放视频。我有一个很小的项目,我正在测试这个项目,任何建议都会很好。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     import SwiftUI
     import Combine
     import PhotosUI
     import AVKit

    struct PlayVideoView: View {
    @State private var selectedItem: [PhotosPickerItem] = []
    @State private var data: Data?
    @State var player = AVPlayer(url: URL(string: "https://swiftanytime-content.s3.ap-south-1.amazonaws.com/SwiftUI-Beginner/Video-Player/iMacAdvertisement.mp4")!)
    
    var body: some View {
        PhotosPicker(selection: $selectedItem,
                     maxSelectionCount: 1,
                     matching: .any(of: [.images,.videos])) {
            Image(systemName: "photo")
                .resizable()
                .foregroundColor(.blue)
                .frame(width: 24, height: 24)
                .padding(.top, 5.0)
        }.onChange(of: selectedItem) { newMedia in
            Task {
                guard let item = selectedItem.first else {
                    return
                }
                item.loadTransferable(type: Data.self) { result in
                    
                    switch result {
                    case .success(let data):
                        if let data = data {
                            print(item) // get video url here and display in videoplayer
                            self.data = data
                            
                        } else {
                            print("data is nil")
                        }
                    case .failure(let failure):
                        fatalError("\(failure)")
                    }
                }
            }
        }
        VideoPlayer(player: player) // selected video url should go here
             .frame(width: 400, height: 300, alignment: .center)
    }
}

struct PlayVideoView_Previews: PreviewProvider {
    static var previews: some View {
        PlayVideoView()
     }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-25 22:03:16

您可以使用来自https://github.com/zunda-pixel/SamplePhotosPicker的代码来尝试这种方法。这里复制的Movie代码使用TransferRepresentation来表示来自临时文件的url。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Foundation
import SwiftUI
import PhotosUI
import AVKit
import CoreTransferable


// from: https://github.com/zunda-pixel/SamplePhotosPicker
struct Movie: Transferable {
  let url: URL

  static var transferRepresentation: some TransferRepresentation {
    FileRepresentation(contentType: .movie) { movie in
      SentTransferredFile(movie.url)
    } importing: { receivedData in
      let fileName = receivedData.file.lastPathComponent
      let copy: URL = FileManager.default.temporaryDirectory.appendingPathComponent(fileName)

      if FileManager.default.fileExists(atPath: copy.path) {
        try FileManager.default.removeItem(at: copy)
      }

      try FileManager.default.copyItem(at: receivedData.file, to: copy)
      return .init(url: copy)
    }
  }
}

struct ContentView: View {
    var body: some View {
        PlayVideoView()
    }
}

struct PlayVideoView: View {
    @State private var selectedItem: [PhotosPickerItem] = []
    @State var player = AVPlayer(url: URL(string: "https://swiftanytime-content.s3.ap-south-1.amazonaws.com/SwiftUI-Beginner/Video-Player/iMacAdvertisement.mp4")!)
    
    var body: some View {
        PhotosPicker(selection: $selectedItem,
                     maxSelectionCount: 1,
                     matching: .any(of: [.images,.videos])) {
            Image(systemName: "photo")
                .resizable()
                .foregroundColor(.blue)
                .frame(width: 24, height: 24)
                .padding(.top, 5.0)
        }.onChange(of: selectedItem) { newMedia in
            Task {
                guard let item = selectedItem.first else {  return }
                item.loadTransferable(type: Movie.self) { result in   // <-- here
                    switch result {
                    case .success(let movie):
                        if let movie = movie {
                            player = AVPlayer(url: movie.url) // <-- here
                        } else {
                            print("movie is nil")
                        }
                    case .failure(let failure):
                        fatalError("\(failure)")
                    }
                }
            }
        }
        VideoPlayer(player: player)
            .frame(width: 400, height: 300, alignment: .center)
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74202070

复制
相关文章
JavaScript中如何中断forEach循环
arr.forEach(callback[, thisArg]),callback会接收到三个参数:currentValue、index、array
meteoric
2018/11/20
2.7K0
Python-自动化之进度条估算问题
任何时候你想看代码中的循环,所以你可以简单地把它包在任一tdqm() or tqdm_notebook(),如果你在一个Jupyter笔记本电脑的环境中工作。您也可以使用desc=参数为进度栏提供描述:
用户2966292
2021/05/28
8280
Python-自动化之进度条估算问题
Java中for循环嵌套以及循环的中断
很多初学者到for循环这里就学不会了,今天,我来讲解一下for循环以及嵌套循环,还有中断。
用户7886150
2020/12/03
6.2K0
[917]python的tqdm模块——进度条配置
Tqdm 是一个快速,可扩展的Python进度条,可以在 Python 长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator)。
周小董
2020/12/29
2.2K0
(数据科学学习手札91)在Python中妥善使用进度条
在日常运行程序的过程中常常涉及到循环迭代过程,对于执行时间很短的程序来说倒无所谓,但对于运行过程有明显耗时的涉及循环迭代的程序,为其加上进度条(progress bar),是帮助我们监测代码执行进度以及处理中间异常错误非常实用的技巧。
Feffery
2020/08/02
1.7K0
在Python中妥善使用进度条
在日常运行程序的过程中常常涉及到「循环迭代」过程,对于执行时间很短的程序来说倒无所谓,但对于运行过程有明显耗时的涉及「循环迭代」的程序,为其加上「进度条」(progress bar),是帮助我们监测代码执行进度以及处理中间异常错误非常实用的技巧。
朱卫军 AI Python
2022/04/03
2.9K0
在Python中妥善使用进度条
python tqdm进度条乱码
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
sofu456
2019/10/22
2.4K0
python tqdm进度条乱码
Python - 进度条神器 tqdm 用法
程序运行过程中进度条显示特别重要,Python中使用tqdm库作为进度条操作工具,本文简要介绍tqdm常用功能。 背景 tqdm源自阿拉伯语 taqaddum,意思是进程( “progress”); 也是西班牙语中 “I love you so much” (te quiero demasiado)的缩写(这个是碰了巧了) 该模块的作用就是通过装饰tqdm(iterable)任何可迭代的对象,使代码中的循环(loop)在运行过程中为用户展示进度条。 盗了官网的图直观展示一下效果 准备工作
为为为什么
2022/08/04
2.1K0
Python - 进度条神器 tqdm 用法
Python使用扩展库tqdm显示进度条
感谢湖南工业大学王平老师的交流,要不然我还不知道有这么一个库。 tqdm在阿拉伯语中表示“progress”,而在西班牙语中则是“I love you so much”的缩写。 首先需要使用pip install tqdm安装这个扩展库。 执行下面的代码(代码中的sleep()函数是为了模拟特定工作所需时间): from tqdm import tqdm, trange from time import sleep s = 0 for i in tqdm(range(10)): s += i
Python小屋屋主
2018/04/16
2K0
Python使用扩展库tqdm显示进度条
Python中关于进度条的6个实用技巧
费老师我在几年前写过的一篇文章(https://www.cnblogs.com/feffery/p/13392024.html)中,介绍过tqdm这个在当下Python圈子中已然非常流行的进度条库,可以帮助我们为任何具有循环迭代过程的代码逻辑添加进度条,从而帮助我们感知代码运行的过程。
朱卫军 AI Python
2022/07/06
1.1K0
Python中关于进度条的6个实用技巧
Python中关于进度条的6个实用技巧
  费老师我在几年前写过的一篇文章(https://www.cnblogs.com/feffery/p/13392024.html)中,介绍过tqdm这个在当下Python圈子中已然非常流行的进度条库,可以帮助我们为任何具有循环迭代过程的代码逻辑添加进度条,从而帮助我们感知代码运行的过程。
Feffery
2022/05/09
1.3K0
Python中关于进度条的6个实用技巧
给程序加个进度条——tqdm
tqdm 来自阿拉伯语taqaddum,意思是进展(progress),并且在西班牙语中是我非常爱你(te quiero demasiado)的缩写[1]。
一只大鸽子
2022/12/06
2K0
给程序加个进度条——tqdm
tqdm模块无法单行打印进度条
python的tqdm模块用于进度条打印等功能,在大部分IDE、大部分情况下是可以正常打印的,但当你手动停止了tqdm管理的代码块后,就会出现以下场景:
小草AI
2019/07/19
3.6K0
tqdm模块无法单行打印进度条
使用tqdm组件构造程序进度条
主要代码 import tqdm # 引用tqdm组件 TRAIN_STEPS = N for i in tqdm.tqdm(range(TRAIN_STEPS)): #用tqdm结构包含原有迭代器
演化计算与人工智能
2020/08/14
6000
(数据科学学习手札53)Python中tqdm模块的用法
  tqdm是Python中专门用于进度条美化的模块,通过在非while的循环体内嵌入tqdm,可以得到一个能更好展现程序运行过程的提示进度条,本文就将针对tqdm的基本用法进行介绍。
Feffery
2019/03/05
2K0
Python中tqdm模块的用法
  tqdm是Python中专门用于进度条美化的模块,通过在非while的循环体内嵌入tqdm,可以得到一个能更好展现程序运行过程的提示进度条,本文就将针对tqdm的基本用法进行介绍。
狼啸风云
2022/11/22
1.4K0
Python中tqdm模块的用法
Python 好用的库- 进度条库 tqdm
前言 在写生成器的时候,网上看到一个进度条库,感觉蛮有意思,记录下 这个库感觉只有在调试的时候会用到,不做深入学习 内置库,不需要安装 示例代码 from tqdm import tqdm for
小菠萝测试笔记
2021/04/22
6680
15个应该掌握的Jupyter Notebook 使用技巧
Jupyter Notebook是一个基于浏览器的交互式编程环境(REPL, read eval print loop),它主要构建在IPython等开源库上,允许我们在浏览器上运行交互式python代码。并且有许多有趣的插件和神奇的命令,大大增强了python的编程体验。
deephub
2020/09/23
1.9K0
15个应该掌握的Jupyter Notebook 使用技巧
数据分析篇 | 如何配置数据分析利器Jupyter Notebook?
指定启动目录可以减少很多切换目录的麻烦操作,呆鸟以前写过一篇《1 分钟修改 Jupyter 启动文件夹》,已经介绍过,不在此赘述了。
龙哥
2019/12/12
2.3K0
数据分析篇 | 如何配置数据分析利器Jupyter Notebook?
python 三方库:tqdm实现进度条
在开发的过程中,我们总会遇到这样的,去实现进度条展示,那么如何来实现进度条呢,其实有一个模块已经给我们完成了--tqdm
雷子
2023/09/11
5400
python 三方库:tqdm实现进度条

相似问题

vi编辑器中的^M字符

11

如何在Vi编辑器中删除CRLF

21

如何在VI编辑器中删除选定的文本?

289

如何在vi编辑器中删除多行特殊字符

10

删除shell脚本中每行末尾的^M

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文