Skip to content

Instantly share code, notes, and snippets.

@katryo
Last active December 6, 2015 08:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save katryo/c32521b94c0cd3f303f3 to your computer and use it in GitHub Desktop.
Save katryo/c32521b94c0cd3f303f3 to your computer and use it in GitHub Desktop.
iOSアプリでWeb上の音楽ファイルをHTTPストリーミング再生しながらキャッシュにも入れるライブラリ、Choristerとその実装 ref: http://qiita.com/katryo/items/c152ea9de11edbdbc0e4
private func respondWithDataForRequest(dataRequest: AVAssetResourceLoadingDataRequest) -> Bool {
var startOffset = dataRequest.requestedOffset
if dataRequest.currentOffset != 0 {
startOffset = dataRequest.currentOffset
}
let songDataLength = Int64(self.songData.length)
if songDataLength < startOffset {
return false
}
let unreadBytes = songDataLength - startOffset
let numberOfBytesToRespondWith: Int64
if Int64(dataRequest.requestedLength) > unreadBytes {
numberOfBytesToRespondWith = unreadBytes
} else {
numberOfBytesToRespondWith = Int64(dataRequest.requestedLength)
}
dataRequest.respondWithData(self.songData.subdataWithRange(NSMakeRange(Int(startOffset), Int(numberOfBytesToRespondWith))))
let endOffset = startOffset + dataRequest.requestedLength
let didRespondFully = songDataLength >= endOffset
return didRespondFully
}
func connectionDidFinishLoading(connection: NSURLConnection) {
self.processPendingRequests()
let url = getActualURL(connection.currentRequest.URL!)
let urlString = url.absoluteString
if (audioCache.objectForKey(urlString) != nil) {
return
}
audioCache[urlString] = songData
}
private func loadAsset(url: NSURL) -> NSURLAsset {
(省略)
let scheme = url.scheme
asset = AVURLAsset(URL: urlWithCustomScheme(url, scheme: scheme + "streaming"), options: nil)
}
asset.resourceLoader.setDelegate(audioLoader, queue: dispatch_get_main_queue())
return asset
}
private func urlWithCustomScheme(url: NSURL, scheme: String) -> NSURL {
let components = NSURLComponents(URL: url, resolvingAgainstBaseURL: false)!
components.scheme = scheme
return components.URL!
}
pod "Chorister"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment