Tag: avurlasset

AVPlayer和AVURLAssets的渐进式video下载

我们正在开发一个应用程序,需要通过AVPlayer播放video文件。 这些文件需要存储在用户的设备上,而且还必须在下载时播放。 目前我们已经构build了一个下载模块,它使用ASIHTTPRequest库通过PHP获取video文件(我们不希望媒体可以通过公共URL链接),并将它们asynchronous写入磁盘。 然后根据AV Foundation编程指南设置AVPlayer,使用AVURLAsset获取文件,使用资产制作AVPlayerItem,使用AVPlayer生成项目,然后将播放器设置为AVPlayerLayer。 播放器运行正常,完全下载的video文件,也将在模拟器中完美运行逐步下载的文件。 不幸的是,在实际的设备上,播放器的行为发生了变化,反而看起来像载入一次video,而不会尝试从磁盘抓取新的数据包。 结果是播放器将播放video和audio直到video中标记下载进度是在资产被加载的时间点 (例如,如果2MB的数据被缓冲,那么播放器被创build,播放器将只玩到2MB的数据)。 由于它具有video的标题,因此播放器会高兴地继续认为它正在播放video的整个持续时间,但是没有其他video呈现在屏幕上。 最后的一个问题是,如果video被插入到AVComposition中,并且AVPlayer被创build,那么渐进video将会播放正常。 这将是一个很好的解决scheme(无论如何我们的应用程序有时是必要的),除了我们的应用程序的客户端需要video可以通过AirPlay播放的Apple TV,这AVCompositions是不能的。 有谁知道是否有一种方法可以使用AVURLAssets构build的AVPlayer逐步下载video文件? 有没有办法强制播放器/ playerItem从AVURLAsset读取磁盘的方式似乎与AVComposition,而不是看起来caching在内存中的video? 谢谢!

从video文件中提取audio

如何从video文件中提取audio而不使用FFmpeg ? 我想使用AVMutableComposition和AVURLAsset来解决它从.mov到.m4a文件的转换。

AVMutableComposition – video资产之间的空白/黑框

我目前正在尝试使用AVMutableComposition将5个video背对背放置,如下所示: [mixComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset1.duration) ofAsset:asset1 atTime:[mixComposition duration] error:nil]; [mixComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset2.duration) ofAsset:asset2 atTime:[mixComposition duration] error:nil]; [mixComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset3.duration) ofAsset:asset3 atTime:[mixComposition duration] error:nil]; [mixComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset4.duration) ofAsset:asset4 atTime:[mixComposition duration] error:nil]; [mixComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset5.duration) ofAsset:asset5 atTime:[mixComposition duration] error:nil]; 然后,我使用AVAssetExportSession导出video,然而,每个video之间的工作,我得到一个空白/黑框,我需要删除。 有没有人有过这个问题,如果是你设法解决它? 另外,空白帧不在源video文件中。 提前致谢。

如何使用AVURLAssetstream式传输video并将caching的数据保存到磁盘

前几天我被要求检查一下从网上下载video有多困难。 我知道这是一件容易的事,因为前一阵子有人告诉我。 所以,我检查,这是超级简单。 问题是,我想保存到磁盘的video,不要强迫用户下载一次又一次。 问题是访问缓冲区并将其存储到磁盘。 在Stackoverflow许多答案说,这也是不可能的。 特别与video。 我的原始代码播放video: import AVFoundation …. //MARK: – Accessors lazy var player: AVPlayer = { var player: AVPlayer = AVPlayer(playerItem: self.playerItem) player.actionAtItemEnd = AVPlayerActionAtItemEnd.None return player }() lazy var playerItem: AVPlayerItem = { var playerItem: AVPlayerItem = AVPlayerItem(asset: self.asset) return playerItem }() lazy var asset: AVURLAsset = { var asset: […]