热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何显示AVPlayer播放音频的进度-HowtodisplayprogressofAVPlayerplaybackofaudio

Imbuildingamusicappthatwillhaveafeedofpoststhatcontainurltomusicfiles.Whenacell

I'm building a music app that will have a feed of posts that contain url to music files. When a cell in UITableView becomes fully visible playback of a corresponding music track starts. This is a layout I have now.

我正在构建一个音乐应用程序,其中包含包含音乐文件URL的帖子。当UITableView中的单元格变为完全可见时,将开始播放相应的音乐曲目。这是我现在的布局。

Layout

Waveform is being generated by a server and I receive its data as an array of type [Float]. Complete waveform is a UIView that has a bar subviews with a height of a corresponding item from array from a server.

波形由服务器生成,我将其数据作为[Float]类型的数组接收。完整波形是一个UIView,它有一个条形子视图,其高度与服务器阵列中的相应项目相同。

Here is a WaveformPlot Source:

这是一个WaveformPlot来源:

class WaveformPlot: UIView {


  override init(frame: CGRect) {
    super.init(frame: frame)
    
  }
  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    

  }

  //MARK: Populate plot with data from server response
  
  func populateWithData(from dataSet: [Float]){
    
    DispatchQueue.main.async {
      
      var offset: CGFloat = 0
      
      for index in 0..

Source of a player I've implemented.

我实施的玩家的来源。

class StreamMusicPlayer: AVPlayer {
  private override init(){
    
    super.init()
    
  }
  
  static var currentItemURL: String?
  
  static var shared = AVPlayer()
  
  static func playItem(musicTrack: MusicTrack) {
    
    StreamMusicPlayer.shared = AVPlayer(url: musicTrack.trackURL)
    
    StreamMusicPlayer.currentItemURL = musicTrack.trackURL.absoluteString
    
    StreamMusicPlayer.shared.play()
    
    
    
  }
}

extension AVPlayer {
  
  var isPlaying: Bool {
    return rate != 0 && error == nil
  }
  
}

The problem is that it is required to show progress of a track currently playing in a corresponding cell waveform.

问题是需要显示当前在相应的单元波形中播放的轨道的进度。

It has to be similar to this:

它必须与此类似:

enter image description here

What approach should i choose? I'm out of ideas how to implement this. Any help appreciated.

我应该选择什么方法?我没有想法如何实现这一点。任何帮助赞赏。

1 个解决方案

#1


1  

The method described by war4l is a way of showing the progress. But to actually get the progress you need to add a periodic time observer. Something like this.

war4l描述的方法是显示进度的方式。但要实际获得进度,您需要添加一个定期时间观察器。像这样的东西。

let interval = CMTime(value: 1, timescale: 2)
StreamMusicPlayer.shared.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main, using: { (progressTime) in

     let secOnds= CMTimeGetSeconds(progressTime)

     if let duration = self.StreamMusicPlayer.shared.currentItem?.duration {                   

         let totalDuratiOnInSeconds= CMTimeGetSeconds(duration)

         // Now you have current time and the duration so can display this somehow                          
    }
})

推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • 本文探讨了在iOS平台上开发BLE(蓝牙低功耗)应用程序时遇到的挑战,特别是如何实现应用在后台模式下仍能持续扫描并连接蓝牙设备。文章提供了具体的配置方法和常见的问题解决方案。 ... [详细]
  • iOS 开发技巧:TabBarController 自定义与本地通知设置
    本文介绍了如何在 iOS 中自定义 TabBarController 的背景颜色和选中项的颜色,以及如何使用本地通知设置应用程序图标上的提醒个数。通过这些技巧,可以提升应用的用户体验。 ... [详细]
  • 本文探讨了在iOS项目中导入MKNetworkKit库时遇到的常见问题及其解决方案。 ... [详细]
author-avatar
多米音乐_34216717
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有