小编ken*_*nyc的帖子

使用MPMoviePlayerController或AVPlayer(iOS)播放受M4V保护的内容

有没有办法让MPMoviePlayerController(甚至像AVPlayer这样的低级别)从iTunes Store播放受保护的M4V文件?

在此处使用官方iTunes API:http: //www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html

我可以获得电影,电视节目和音乐视频的"previewURL".音乐视频似乎没有受到保护,但电影和电视节目却受到保护.

例如,这是披头士的音乐视频的预览URL(实际上是纪录片,但无论如何):http: //a809.v.phobos.apple.com/us/r1000/006/Video/72/fe/ 52/mzm.bxhrrlns..640x480.h264lc.upm4v

这是"辛普森一家"一集的预览网址:http: //a911.v.phobos.apple.com/us/r1000/017/Video/ec/cc/cf/mzi.mnuqbbcl..640x480.h264lc. d2.p.m4v

使用MPMoviePlayerController可以播放音乐视频,但是辛普森一家的视频根本不播放.(当与MPMoviePlayerViewController一起使用时,视图控制器以模态方式显示,然后在没有任何用户交互的情况下立即被解除.)

如果您在QuickTime Pro中查看这两个URL,唯一明显的区别是第二个URL被列为"受保护",这将导致人们假设MPMoviePlayerController无法播放受保护的内容,即使该内容直接来自苹果.

在文档中的"支持的格式"部分下,M4V没有具体列出,但肯定有效.我找不到任何引用受保护内容的文档.

如果有人知道如何在应用程序内或通过其他方式播放此内容,那只是好奇.(调用[UIApplication ... openURL]也不起作用,因为Mobile Safari也不会播放内容.)

这是在iOS 4.x.

谢谢.

cocoa-touch drm mpmovieplayercontroller ios4 ios

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

使用自动布局自动换行NSTextField

当NSTextField的宽度发生变化时,如何让自动布局自动将NSTextField包装到多行?

我有许多NSTextFields在检查器窗格中显示静态文本(即:标签).当用户调整检查器窗格的大小时,如果需要,我希望右侧标签能够回流到多行.

(Finder的"获取信息"面板执行此操作.)

但是我无法弄清楚自动布局约束的正确组合以允许这种行为.在所有情况下,右侧的NSTextFields拒绝换行.(除非我明确添加允许它的高度约束.)

视图层次结构使得每个灰色条带是包含两个NSTextField的视图,左侧是属性名称,右侧是属性值.当用户调整检查器窗格的大小时,我希望属性值标签根据需要自动调整其高度.

现在的情况:

文字字段不包装.

我希望发生什么:

在此输入图像描述

(请注意,这种行为与我遇到的关于NSTextFields和自动布局的大多数Stack Overflow问题不同.这些问题希望文本字段在用户输入时增长.在这种情况下,文本是静态的,NSTextField配置为看起来像一个标签.)

更新1.0

考虑到@ hamstergene的建议,我将NSTextField子类化并制作了一个示例应用程序.在大多数情况下,它现在可以工作,但现在有一个小的布局问题,我怀疑这是因为NSTextField的框架与自动布局所期望的完全不同步.在下面的屏幕截图中,右侧标签都是垂直间隔的top约束.在调整窗口大小时,Where字段将正确调整大小并进行包装.但是,在Kind我再次调整窗口"一个像素"之前,文本字段不会被推下.

在此输入图像描述 示例:如果我将窗口的大小调整为Where文本字段首次换行的正确宽度,那么我会在中间图像中得到结果.如果我再向窗口调整一个像素,则会Kind正确设置字段的垂直位置.

我怀疑这是因为自动布局正在通过,然后帧被明确设置.我想自动布局在那个传球上没有看到,但是在下一次传球时看到它,并相应地更新位置.

假设这是问题,我如何通知我正在进行的这些更改的自动布局,setFrameSize以便它可以再次运行布局.(而且,最重要的是,不要陷入layout-setFrameSize-layout-etc.的递归状态...)

我想出了一个解决方案,似乎与我希望的完全一致.取而代之的子类的NSTextField,我只是覆盖layoutsuperviewNSTextField问题.在内部layout,我设置preferredMaxLayoutWidth文本字段,然后触发布局传递.这似乎足以使它大部分工作,但它留下了布局短暂"错误"的恼人问题.(见上面的注释).

解决方案似乎是调用setNeedsDisplay然后一切正常工作.

    - (void)layout {
      NSTextField *textField = ...;
      NSRect oldTextFieldFrame = textField.frame;

      [textField setPreferredMaxLayoutWidth:NSWidth(self.bounds) - NSMinX(textField.frame) - 12.0];

      [super layout];

      NSRect newTextFieldFrame = textField.frame;
      if (oldTextFieldFrame.size.height != newTextFieldFrame.size.height) {
        [self setNeedsDisplay:YES];
      }
    }
Run Code Online (Sandbox Code Playgroud)

cocoa appkit autolayout

8
推荐指数
2
解决办法
7005
查看次数

如何使用多个 AVVideoCompositions 合成视频

我试图弄清楚如何将多个视频(AVAssets)合成为一个视频,以便每个视频都经过自己的视频合成。但是,我看不到实现这一目标的方法,想知道是否有人有任何想法。

考虑以下:

在此处输入图片说明

上图说明了我正在尝试做的事情。我想从四个不同的视频中获取视频轨道并将它们合并到一个视频中,以便它们以类似网格的布局播放。

现在,我可以通过执行以下操作来实现这一目标

  • 创建单个 AVMutableComposition

  • 向可变合成添加四个视频轨道

  • 创建四个应用AVMutableVideoCompositionLayerInstruction适当的实例transform以缩放和平移轨道。

  • 创建一个AVMutableVideoComposition,向其添加图层说明,然后在适当的位置设置该视频合成AVAssetExportSession

虽然这有效,但它并没有让我能够在将每个视频轨道合成到输出剪辑之前对每个视频轨道进行任何自定义效果。例如,在上图中,我想在每个轨道周围添加独特的边框颜色。使用单个视频(因此没有图层说明),然后我可以使用类似 的东西添加边框AVVideoComposition applyingCIFiltersWithHandler,效果很好。但我不能使用它,因为我需要视频合成来设置变换和缩放指令。

applyingCIFiltersWithHandler似乎没有提供一种方法来访问构成正在渲染的帧的轨道。)

我想我想要的是能够在 a 中进行某种类型的自定义渲染AVMutableVideoCompositionLayerInstruction,但目前唯一可用的选项是转换和不透明度选项。

(请注意,任何解决方案都要求我在渲染每个视频轨道期间访问当前合成时间, 因为我想要渲染的一些“效果”是帧计数器和时间码显示。)

任何帮助、想法或提示将不胜感激。

macos objective-c video-processing avfoundation ios

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

如何仅在收到第一条消息后应用组合运算符?

Combine仅使用内置运算符的情况下,有没有办法跳过第一个值上的运算符,然后将该运算符应用于所有后续值?

考虑以下:

publisher
  .debounce(...)
  .sink(...)
Run Code Online (Sandbox Code Playgroud)

在这种安排中,debounce将等待指定的超时时间过去,然后再将值传递给sink。然而,很多时候您只想debounce在第一个元素之后启动。例如,如果用户尝试过滤联系人列表,他们很可能只在文本字段中输入一个字母。如果是这种情况,应用程序可能应该立即开始过滤,而不必等待debounce超时。

我知道Drop发布者,但我似乎找不到它们的组合来执行更多的“跳过”操作,以便接收sink每个值,但debounce在第一个值上被忽略。

像下面这样:

publisher
  .if_first_element_passthrough_to_sink(...), else_debounce(...)
  .sink(...)
Run Code Online (Sandbox Code Playgroud)

内置运算符可以实现类似的功能吗?

澄清

由于我最初的帖子没有应有的那么清晰,所以需要进行一些澄清...下面由 Asperi 提供的答案非常接近,但理想情况下,序列中的第一个元素始终被传递,然后会debounce启动。

假设用户正在输入以下内容:

ABC ...(暂停打字几秒钟)...D ...(暂停)...EFG

我想要的是:

  • ADE立即交付。
  • B C合并为仅C使用debounce
  • F G合并为仅G使用debounce

macos ios swift combine

7
推荐指数
2
解决办法
2649
查看次数

如何以可视格式设置自动布局默认间距度量的优先级?

自动布局使用-符号指示约束应使用默认间距.有没有办法在不必明确设置度量值的情况下设置该间距的优先级?

例如,以下可视格式将在myView其superview 之间创建一个等于默认Cocoa/CocoaTouch值的前导约束.但是这种约束具有优先权required.

@"H:|-[myView]"

以下将创建具有较低优先级的前导约束,但必须指定显式度量值:

@"H:|-(10@750)-[myView]"

我希望能够为前导约束赋予优先级,但不是明确的度量.理由是1)我不想猜测Apple的价值是什么,以及2)如果Apple改变了这个价值,那么将来会证明这一点.

理想情况下,我喜欢以下内容:

@"H:|-(@750)-[myView]" 要么 @"H:|-(-@750)-[myView]"

但这两种语法都不被接受.是否有一个秘密格式字符串可以实现这一目标?

(我不认为iOS和MacOS之间有这样的差异,但如果有,我的目标是MacOS.)

cocoa cocoa-touch uikit appkit autolayout

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

你如何在 Metal 中处理非常大的图像?

TL;DR:在 macOS 10.13 中,MTLTexture最大宽度和高度为 16,384。您可以使用哪些策略来使用 Metal 处理和显示大于 16,384 像素的图像?

在我目前正在使用的照片查看器中,我已将大部分图像查看移动到 Metal 支持的视图中,该视图使用 Core Image 进行任何图像调整。这工作得非常好,但我最近开始针对一些非常大的图像(全景图)进行测试,我现在遇到了一些限制,我不完全确定如何在保持相对性能的同时解决问题。

我现在的环境是这样的:

  • 将图像从 加载并解码NSURLIOSurface。这是通过直接使用 Image IO 或渲染到IOSurface. 在IOSurface接着从XPC服务回主应用程序通过。

  • 在主应用程序中,MTLTexture创建了一个由IOSurface. 然后,CIImageMTLTexture和 中创建CIImage一个,作为根“源图像”在整个图像管道中使用。

但是,如果我尝试打开一维大于 16,384 像素的图像,那么我将无法在我的笔记本电脑上创建原始的 IOSurface 16,384。(13" MBP-TB 2016)

但即使我可以创建一个更大IOSurfaceMTLTexture.

请参阅:Apple 的 Metal Feature Table Set

我很好奇其他人会推荐什么策略来允许一个人打开大型图像文件,同时仍然利用 Core Image 和 Metal。

我所做的一项尝试是将根源图像设为CIImage使用CGImageRef. 但是,CIImage对于更小尺寸的图像,这种排列与纹理支持之间的性能显着下降。

我曾经有过但尚未探索的另一个想法CIImageProvider …

macos cocoa metal metalkit

6
推荐指数
0
解决办法
207
查看次数

Skeleton Example for Swift Combine Publisher-Subscriber

As I port some Objective-C code to Swift, I'm trying to better understand the new Combine framework and how I can use it to re-create a common design pattern.

In this case, the design pattern is a single object (Manager, Service, etc) that any number of "clients" can register with as a delegate to receive callbacks. It's a basic 1:Many pattern using delegates.

Combine看起来很适合这个,但示例代码有点薄。下面是一个工作示例,但我不确定它是否正确或按预期使用。特别是,我对对象之间的引用循环很好奇。

class Service {

  let tweets = PassthroughSubject<String, Never>()

  func start() {
    // Simulate the need …
Run Code Online (Sandbox Code Playgroud)

publish-subscribe swift swift5 combine

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

如何跨进程同步 MTLTexture 和 IOSurface?

在写入IOSurface同时用MTLTexture作主应用程序中的后备存储的 XPC 进程时,我需要使用哪些 API,以及需要采取哪些预防措施?

在我的 XPC 服务中,我有以下内容:

IOSurface *surface = ...;
CIRenderDestination *renderDestination = [... initWithIOSurface:surface];

// Send the IOSurface to the client using an NSXPCConnection.
// In the service, periodically write to the IOSurface.
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我有以下内容:

IOSurface *surface = // ... fetch IOSurface from NSXPConnection.
id<MTLTexture> texture = [device newTextureWithDescriptor:... iosurface:surface];

// The texture is used in a fragment shader (Read-only)
Run Code Online (Sandbox Code Playgroud)

我有一个MTKView正在运行它的正常更新循环。我希望我的 XPC 服务能够定期写入IOSurface使用的 Core Image,然后在应用程序端由 Metal 呈现新内容。

需要什么同步才能确保正确完成?双缓冲或三缓冲策略是一种,但这对我来说并不真正有效,因为我可能没有足够的内存来分配 2 倍或 3 …

macos xpc core-image metal iosurface

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

我什么时候应该使用 NSURLCanonicalPathKey?

在 macOS 10.12 中,NSURLCanonicalPathKey被添加到NSURL. 文档指出:

\n\n
\n

URL 的路径作为规范的绝对文件系统路径。

\n
\n\n

除此之外,我看到的唯一其他文档/信息来自Swift 论坛帖子,其中指出:

\n\n
\n

您可能想查看 .canonicalPathKey (NSURLCanonicalPathKey)。在 Apple 平台上,许多标准 UNIXy 路径都存在于 /private/ 中,并具有来自根目录的相应符号链接。所以/etc/实际上是/private/etc/。如果您不\xe2\x80\x99t 规范化路径,您可能会因此而陷入困境。

\n
\n\n

这对我来说似乎是一件大事,但令我惊讶的是它只在 10.12 中引入。我曾经只依赖NSURLPathKey.path书签数据来解析 URL,但从来没有遇到过问题

\n\n
    \n
  • 我现在应该在以前使用过的所有地方都使用规范路径\n标准路径值吗?

  • \n
  • 如果我将路径信息作为字符串存储在数据库中,我应该存储.pathor的值吗NSURLCanonicalPathKey

  • \n
  • 如果我将 转换NSURL为字符串表示形式以在需要文件路径的 C/C++ 库中使用,我应该使用规范路径表示形式吗?

  • \n
  • 如果您要向用户显示文件的路径,是否应该显示规范路径?

  • \n
  • 与和NSURLCanonicalPathKey相比如何,它们似乎做了相同的事情或相反的事情......(?)URLByStandardizingPathURLByResolvingSymlinksInPath

  • \n
\n\n

这是在 macOS 10.14 上,我只考虑指向文件或文件夹的 URL。我知道书签数据可能应该存储在数据库中而不是路径中。

\n

url macos cocoa core-foundation appkit

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

在 SwiftUI 中,如何限制 ObservableObject 的哪些 @Published 属性触发视图刷新?

在 中SwiftUI,有没有办法控制触发视图@Published中的哪些属性@ObservableObject要刷新?

\n

model在 iPad 和 macOS 上,我发现在屏幕上同时呈现的多个视图之间共享是很常见的。这model是一个ObservableObject具有众多属性的@Published. 然而,任何这些属性的出现似乎都会导致 SwiftUI 重建视图层次结构,即使并非完全必要。

\n

考虑下面的例子。有一个model调用Order具有多个已发布的属性。有两种并列提出的观点都依赖于Order。如果您对 进行更改Order.nameOrder.address从 进行更改CustomerView,那么也会触发CartView进行刷新,即使它仅依赖于Order.items

\n

理想情况下,我想要一种方法来告诉忽略CustomerView对和 的更新。但由于是一个我不知道该怎么做。Order.itemsCartViewOrder.nameOrder.addressorder@EnvironmentObject

\n

替代解决方案:

\n

我可以解决这个问题的一种方法是不使用@EnvironmentObject而只是Order通过标准属性初始值设定项传递。然后声明单独的@Binding属性CustomerViewCartView来管理状态。这是可行的,但如果视图和模型有很多属性,很快就会变得大量重复。

\n

并不是太重要,但这主要是针对 iPadOS 和 macOS 开发。

\n
\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82               ContentView                \xe2\x94\x82\n\xe2\x94\x82                                          \xe2\x94\x82\n\xe2\x94\x82\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90 …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

5
推荐指数
0
解决办法
1174
查看次数