MPMediaItem获取确切的文件大小

时间:2018-12-12 20:57:49

标签: ios swift avfoundation avassetexportsession mpmediaitem

那里有很多帖子,展示了如何获取MPMediaItem e的ESTIMATED文件大小。这种使用AVAssetExportSession的方法所提供的文件大小实际上与实际大小不符,例如3M的文件显示为10M。由于无法直接访问ipod-library://计划的URL(至少我不知道),因此我认为我不得不间接获取文件大小。

我猜这个大小不对,因为我在导出时将预设设置为M4A,这在导出时可能会导致一些转码,但是如果我将预设设置为Passthrough,即使设置了timeRange,估计的大小的出口商将永远给我零。

如何获取MPMediaItem的精确文件大小(以字节为单位)?

2 个答案:

答案 0 :(得分:1)

这甚至适用于没有资产URL的项目,即云项目。

extension MPMediaItem{

    // Value is in Bytes
    var fileSize: Int{
        get{
            if let size = self.value(forProperty: "fileSize") as? Int{   
                return size
            }
            return 0
        }
    }

    var fileSizeString: String{
        let formatter = Foundation.NumberFormatter()
        formatter.maximumFractionDigits = 2

        //Byte to MB conversion using 1024*1024 = 1,048,567
        return (formatter.string(from: NSNumber(value: Float(self.fileSize)/1048567.0)) ?? "0") + " MB"
    }

}

答案 1 :(得分:0)

  

由于无法直接访问ipod-library://计划的URL(至少我不知道)

只要资产实际上是库中的文件(即它不是云中的文件),其资产URL就是其assetURL。这与指向存储中文件的指针非常接近。记住,您是沙盒用户(系统不会让您直接在存储用户歌曲的目录中弄乱)。