HLSCachingReverseProxyServer

A simple local reverse proxy server for HLS segment cache

Showing:

Popularity

Downloads/wk

0

GitHub Stars

60

Maintenance

Last Commit

6mos ago

Contributors

2

Package

Dependencies

2

License

MIT

Categories

Readme

HLSCachingReverseProxyServer

Swift CocoaPods Build Status CodeCov

A simple local reverse proxy server for HLS segment cache.

How it works

HLSCachingReverseProxyServer Concept

  1. User sets a reverse proxy url to the AVPlayer instead 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
    
  2. AVPlayer requests a playlist(.m3u8) to the local reverse proxy server.
  3. 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
    
  4. AVPlayer requests segments(.ts) to the local reverse proxy server.
  5. Reverse proxy server fetches the origin segment and caches it. Next time the server will return the cached data for the same segment.

Usage

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)

Dependencies

Installation

Use CocoaPods with Podfile:

pod 'HLSCachingReverseProxyServer'

Development

$ make project
$ open HLSCachingReverseProxyServer.xcworkspace

License

HLSCachingReverseProxyServer is under MIT license. See the LICENSE for more info.

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100