A simple local reverse proxy server for HLS segment cache.
- User sets a reverse proxy url to the
AVPlayerinstead of the origin url.- https://example.com/vod.m3u8 + http://127.0.0.1:8080/vod.m3u8?__hls_origin_url=https://example.com/vod.m3u8
- AVPlayer requests a playlist(
.m3u8) to the local reverse proxy server. - Reverse proxy server fetches the origin playlist and replaces all URIs to point the localhost.
#EXTM3U #EXTINF:12.000, - vod_00001.ts + http://127.0.0.1:8080/vod.m3u8?__hls_origin_url=https://example.com/vod_00001.ts #EXTINF:12.000, - vod_00002.ts + http://127.0.0.1:8080/vod.m3u8?__hls_origin_url=https://example.com/vod_00002.ts #EXTINF:12.000, - vod_00003.ts + http://127.0.0.1:8080/vod.m3u8?__hls_origin_url=https://example.com/vod_00003.ts
- AVPlayer requests segments(
.ts) to the local reverse proxy server. - Reverse proxy server fetches the origin segment and caches it. Next time the server will return the cached data for the same segment.
let server = HLSCachingReverseProxyServer() server.start(port: 8080) let playlistURL = URL(string: "http://devstreaming.apple.com/videos/wwdc/2016/102w0bsn0ge83qfv7za/102/0640/0640.m3u8")! let reverseProxyURL = server.reverseProxyURL(from: playlistURL)! let playerItem = AVPlayerItem(url: reverseProxyURL) self.player.replaceCurrentItem(with: playerItem)Use CocoaPods with Podfile:
pod 'HLSCachingReverseProxyServer'$ make project $ open HLSCachingReverseProxyServer.xcworkspaceHLSCachingReverseProxyServer is under MIT license. See the LICENSE for more info.
