我正在尝试或多或少地为 ipod-library 和 assets-library 中的音乐文件实现 lstat (以获取文件大小和扩展)和 fseek 类似工作。然后我将这些文件流式传输到播放器(可能在此设备上,也可能不在)。
我提出了三种方法,但都不是特别令人满意:
1)模仿 lstat 告诉文件的大小,使用 AVAssetReader 读取文件的其他块,将这些块的长度添加到变量中,直到完成。在循环结束时,变量现在包含文件的长度。
要“fseek”,使用 AVAssetReader,您从文件的开头开始,一直阅读,直到到达所需的点。然后你缓存你可能留下的文件位,并在 fread 发生时保存它。
2) 使用 AVAssetExportSession,将给定文件复制到 Documents 目录,然后您可以对它做任何您需要做的事情(真正的 lstat、fseek 等)。缺点是 5-20 秒的暂停,具体取决于文件的大小。
所以,我的应用程序似乎做了很多额外的工作(#1),或者强迫用户在每首歌曲之间等待 5-20 秒。只是看起来很浪费。
3)使用 ALAsset,您可以获得表示的大小......(但这不适用于音频文件),当然不能解决 fseek。
我目前正在使用#2。确实感觉很慢,但话又说回来,它确实有效,经过一段时间。
其他人可以告诉我更好的方法吗?
谢谢,
-肯