Swift 不会播放链接中的音频 - iOS

2024-03-11

我正在使用 Subsonic,因此 mp3 文件是通过网络服务提供给我的。 当我使用具有 .mp3 扩展名的文件进行测试时,此代码有效。当我将它与下面的链接一起使用时,它不会。

    var player: AVPlayer!

    override func viewDidLoad() {
        super.viewDidLoad()

        let url = URL(string: "http://192.168.1.74:4040/rest/download?u=admin&p=admin&v=1.12.0&c=myapp&id=114&format=mp3")!
        let playerItem = CachingPlayerItem(url: url)
        playerItem.delegate = self        
        player = AVPlayer(playerItem: playerItem)
        player.automaticallyWaitsToMinimizeStalling = false
        player.play()

    }

}

浏览“url”中的链接为我提供了我期望的文件。我还成功下载了文件,将其保存为 MP3 并从我的文档容器中播放它,但这不是我希望应用程序工作的方式。

TL:DR如何让我的应用程序在没有扩展的情况下从 REST API 播放音频


您可以使用AVAsset资源加载器 https://developer.apple.com/documentation/avfoundation/avassetresourceloader播放没有扩展名的音频。

这是一个例子。

首先,配置委托resourceloader

var playerAsset: AVAsset!

if fileURL.pathExtension.count == 0 {
    var components = URLComponents(url: fileURL, resolvingAgainstBaseURL: false)!

    components.scheme = "fake" // make custom URL scheme
    components.path += ".mp3"

    playerAsset = AVURLAsset(url: components.url!)
    (playerAsset as! AVURLAsset).resourceLoader.setDelegate(self, queue: DispatchQueue.global())
} else {
    playerAsset = AVAsset(url: fileURL)
}

let playerItem = AVPlayerItem(asset: playerAsset)

然后,读取音频数据并响应资源加载器

// MARK: - AVAssetResourceLoaderDelegate methods

func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool {
    if let url = loadingRequest.request.url {
        var components = URLComponents(url: url, resolvingAgainstBaseURL: false)!
        components.scheme = NSURLFileScheme // replace with the real URL scheme
        components.path = String(components.path.dropLast(4))

        if let attributes = try? FileManager.default.attributesOfItem(atPath: components.url!.path),
            let fileSize = attributes[FileAttributeKey.size] as? Int64 {
            loadingRequest.contentInformationRequest?.isByteRangeAccessSupported = true
            loadingRequest.contentInformationRequest?.contentType = "audio/mpeg3"
            loadingRequest.contentInformationRequest?.contentLength = fileSize

            let requestedOffset = loadingRequest.dataRequest!.requestedOffset
            let requestedLength = loadingRequest.dataRequest!.requestedLength

            if let handle = try? FileHandle(forReadingFrom: components.url!) {
                handle.seek(toFileOffset: UInt64(requestedOffset))
                let data = handle.readData(ofLength: requestedLength)

                loadingRequest.dataRequest?.respond(with: data)
                loadingRequest.finishLoading()

                return true
            } else {
                return false
            }
        } else {
            return false
        }
    } else {
        return false
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 不会播放链接中的音频 - iOS 的相关文章

  • 如何在 Apple Watch Extension/App 和 iOS App 之间建立通信通道

    我正在探索 WatchKit SDK 当我有 WatchKit 应用程序时 是否可以在 WatchKit 应用程序上从 iPhone 应用程序设置值 例如文本 设置 我可以从 iPhone 应用程序调用 WatchKit 应用程序扩展中的函
  • 如何快速更改按钮图像?

    我正在开发一个有按钮的应用程序 该按钮没有文本 图像或背景 所以我想做的就是在viewDidLoad函数中给它一个图像 这就是我所拥有的 IBOutlet var tapButton UIButton override func viewD
  • 由于语言错误,Itunes Connect 无法提交

    Thats all it shows https i stack imgur com 0aZm8 png 我不确定它没有告诉我出了什么问题 it shows its linked to the language https i stack
  • NSDateFormatter 返回错误的日期 + Swift

    Code let dateString 2016 04 02 var formatter NSDateFormatter NSDateFormatter formatter timeZone NSTimeZone abbreviation
  • ITMS-90535 无法使用最新的 Google Signin SDK 发布 iOS 应用程序

    我正在使用 xcode 7 GM 种子并通过 cocoapods 安装了最新的 Google Signin SDKpod Google SignIn 当我尝试将我的应用程序发布到苹果应用程序商店时 我收到附加错误 Help 以下是 Goog
  • 迭代 NSOrderedSet

    我正在尝试迭代 NSOrderedSet 的实例 像这样的事情 func myFunc var orderedSet NSOrderedSet array 42 43 44 for n in orderedSet NSLog i n 但是
  • 在另一种语言中使用 dateFormatter [重复]

    这个问题在这里已经有答案了 我正在运行一段返回的代码nil在具有不同语言设置的 iPhone 上运行时 代码示例如下所示 let dateFormatter DateFormatter dateFormatter dateFormat MM
  • Swift 中带圆角的 NSWindow

    我想要一个圆角的窗户 但我在每个角落都有一个白点 Code let effect NSVisualEffectView frame NSRect x 0 y 0 width 0 height 0 effect blendingMode be
  • iOS UIButton 带有圆角和背景 bug

    我发现圆形 UIButton 存在一个奇怪的问题 这是我创建此按钮的代码块 let roundedButton UIButton type System roundedButton frame CGRectMake 100 100 100
  • Swift 3.0 Pin 颜色注释在 MapView 中没有改变

    我有兴趣根据案例场景更改注释的图钉颜色 在一个函数中 我发送了一个数组 用于确定引脚注释的颜色 到目前为止 我已经设置了一个名为 ColorPointAnnotation 的子类 它将确定 pinColor 然后 在 switch 语句中
  • Swift 中具有透明背景的按钮边框

    我怎样才能做一个UIButton边框看起来像下图 入门 按钮一样具有透明背景吗 我应该如何使用情节提要来实现这一点 或者如何以编程方式实现这一点 设置backgroundColor to clearColor使按钮透明 例如尝试下面的代码
  • SpriteKitPhysicsBody非矩形碰撞

    pipeUp physicsBody SKPhysicsBody rectangleOfSize pipeUp size 在此编码中我使用了rectangleOfSize对于碰撞物理体 但如果我想按像素仅使用图像的形状 我应该使用什么而不是
  • 无法转换“UINavigationController”类型的值

    我正在为我的应用程序实现一个搜索界面 因此基本上我会将搜索关键字从一个 ViewController 传递到另一个 ViewController 我已经多次进行过这种类型的参数传递 但这次似乎有些奇怪 目标 ViewController 嵌
  • iPhone 快照,包括键盘

    我正在寻找拍摄整个 iPhone 屏幕 包括键盘 的正确方法 我找到了一些截取屏幕的代码 CGRect screenCaptureRect UIScreen mainScreen bounds UIView viewWhereYouWant
  • Objective C UIImagePNGRepresentation内存问题(使用ARC)

    我有一个基于 ARC 的应用程序 它从 Web 服务加载大约 2 000 个相当大 1 4MB 的 Base64 编码图像 它将 Base64 解码后的字符串转换为 png图像文件并将其保存到磁盘 这一切都是在一个循环中完成的 我不应该有任
  • iOS WKWebView.scrollView委托导致BAD_ACCESS

    我的 viewController 有一个 UIView 属性 其中包含一个 WKWebView 我将 WKWebView rollView 委托设置为我的 viewController 它是我的 UIView 子类的公共函数 并在我的 v
  • 我什么时候应该对 IBOutlet 使用弱或强限定符? [复制]

    这个问题在这里已经有答案了 可能的重复 ARC 下 IBOutlets 应该强还是弱 https stackoverflow com questions 7678469 should iboutlets be strong or weak
  • 自定义 MKAnnotationView - 如何捕获触摸而不忽略标注?

    我有一个自定义 MKAnnotationView 子类 它完全按照我想要的方式显示视图 在那个视图中 我有一个按钮 我想捕获按钮上的事件来执行操作 这很好用 但是 我不希望标注被忽略或消失 基本上 触摸标注中的按钮将开始播放声音 但我想保留
  • 应用程序未通过协同设计验证?

    我在提交 iPhone 申请时遇到问题 我看到了一些类似的问题 但没有找到答案 当我存档项目并单击 验证 时 收到错误消息 应用程序未通过协同设计验证 签名无效 或者未使用 Apple 提交证书进行签名 我假设我在协同设计部分做错了什么 我
  • 我应该在哪个方法中设置 UITextField 的委托?

    在 viewDidLoad 或 init 方法中设置 UITextField 的委托是一个好习惯吗 我尝试在 init 方法中将委托设置为 self 但它没有调用相应的委托方法 当我将代码移动到 viewDidLoad 中时 它注册为将 s

随机推荐

  • 无法将 Firebase 函数拆分到多个文件中

    我正在使用 firebase 函数并达到数百个函数 现在很难用单个函数来管理它index js文件如大量示例所示 我尝试将该函数拆分为多个文件 例如 firebase json functions node modules index js
  • 在 RecyclerView 项目中显示动态数量的视图?

    我正在尝试重新创建这个 我有一个数据列表 List
  • XDocument.Load(feedUrl) 返回“根级别的数据无效。第 1 行,位置 1。”

    首先 这更多的是一个解决方案 而不是一个问题 我花了一段时间才解决 所以我认为我的解决方案值得分享 我试图使用加载 RSS 提要XDoument Load feedUrl 并收到上述异常 我检查了养活自己 http www limun hr
  • 允许来自 env 的 mod_rewrite 而不是 .htaccess 中的 mod_setenvif

    我试图使用 htaccess 和 Apache 2 2 控制对测试站点 主机的访问 但不控制对生产站点的访问 我使用 mod rewrite 来检测主机名并设置一些用于控制站点各个方面的环境变量 但无法利用它来控制访问 我只能使用 mod
  • 中文字符以粗体呈现

    Silverlight 在文本框中将少数中文字符呈现为粗体 该文本框没有设置字体系列 请参考以下截图 在上面的屏幕截图中 第一个字符比另一个字符更粗 MSDN 的一篇帖子说这是因为字体系列问题和设置SimSun字体系列应该可以解决这个问题
  • 如何更改 matplotlib 中的当前轴实例(即 gca())

    我用一个技巧绘制高度与主轴匹配的颜色条 http matplotlib org mpl toolkits axes grid users overview html colorbar whose height or width in syn
  • 生成唯一的随机字符串

    我正在用 Dancer 编写一个非常小的 URL 缩短器 它使用 REST 插件将发布的 URL 存储在数据库中 该数据库包含六个字符串 用户可以使用该字符串来访问短 URL 现在我对我的随机字符串生成方法有点不确定 sub generat
  • 使用 movefolder 方法时找不到 vbscript 错误路径

    我对 vbscript 相当陌生 并尝试编写一个脚本来获取带有月份和年份标记的文件夹 2012 04 并将它们移动到带有年份标记的文件夹 2012 当我尝试移动文件夹时 我收到 路径未找到 错误 并且我似乎无法在任何地方找到有关其发生原因的
  • 如何计算字符串语句

    给定一个作为计算语句的字符串组合 我怎样才能得到结果 在本例中是下面代码中的列 cal 我知道我可以使用案例 但是有没有直接的方法来进行计算 create table tl test cl1 int create table tl test
  • WPF 的现代 UI - 导航

    如何在页面之间传递参数 我尝试向页面 uri 添加参数 但它不起作用 因为我无法在用户控件上使用 onNavieratedTo 事件 请帮忙 您必须使用 OnFragmentNavigation public void OnFragment
  • 使用 CameraX 的长焦镜头进行变焦

    在我的应用程序中 变焦仅限于主镜头 而不是设备的长焦镜头 如果有的话 长焦镜头可以由任何制造商提供 我不希望实现特定于制造商设备的 API 来访问长焦或广角镜头 这会导致照片质量较差 并且应用程序无法变焦至超过主摄像头的变焦限制 如何使用长
  • 一页上有多个引导轮播,只能控制一个

    我在视图中一次性加载了动态数量的轮播 但我只能滚动浏览渲染的第一个轮播 我怎样才能控制所有加载的 一次只能查看一个轮播 其他轮播被隐藏 myCarousel carousel interval 10000 carousel item eac
  • 我可以在 Julia 中专门化类型定义吗?

    Julia 的参数类型实际上定义了一系列包含不同内存布局的类型 我想知道这是否也适用于复合类型中的字段名称和数量 一个简单的例子如下 type mytype Float64 a Float64 b Float64 end type myty
  • Bigquery 流:“由于超时而无法插入 XX 行”

    最近几天 我们的直播遇到了 Failed to insert XX rows First error errors reason timeout index YY 在过去半个月的连续流式数据源和程序脚本不变的情况下 之前没有发现过这样的故障
  • C++ 获得整数除法和余数的最佳方法

    我只是想知道 如果我想将 a 除以 b 并且对结果 c 和余数都感兴趣 例如 假设我有秒数并想将其分成分钟和秒 那么最好的方法是什么去做吧 可不可能是 int c int a b int d a b or int c int a b int
  • 在Python中快速绘制数据

    我正在尝试使用 arduino 绘制来自 mpu6050 imu 的数据 MPU6050 发送数据的速度比绘图快 Arduino 代码从串口提供 6 个数据 即偏航 俯仰 滚动 轴 ay 和 az 我需要快速情节的建议 Python代码 i
  • SQL LIMIT 按 id 列

    我有以下声明 SELECT s u fname u lname aif airport FROM services s INNER JOIN airports in flight aif ON s id aif service id INN
  • Ocaml 模块实现

    Ocaml的标准库包含各种模块 List Map Nativeint等等 我知道提供了这些模块的接口 例如 列表模块 http caml inria fr pub docs manual ocaml libref List html 但我对
  • Php 与 NetBeans:在没有实际声明的情况下应用新的 PhpDoc

    有没有一种方法可以应用新的 PhpDoc 而无需重新声明方法 例如我有一个类 class GeneralContainer private children public function construct this gt childre
  • Swift 不会播放链接中的音频 - iOS

    我正在使用 Subsonic 因此 mp3 文件是通过网络服务提供给我的 当我使用具有 mp3 扩展名的文件进行测试时 此代码有效 当我将它与下面的链接一起使用时 它不会 var player AVPlayer override func