Skip to main content

Project Setup

Install dependencies

CocoaPods

To install dependencies into your Xcode project using CocoaPods, specify it in your Podfile:

target 'TargetName' do
# Uncomment the next line if you're using Swift
# use_frameworks!
pod 'P2pEngine-iOS', '= 3.1.2'
end

Then, run the following command:

$ pod install

Carthage

Add the dependencies to the Cartfile:

binary "https://web3lab.b-cdn.net/apple/SwarmCloudKit.json" ~> 3.1.2
binary "https://web3lab.b-cdn.net/apple/Datachannel.json" ~> 1.0.190

Then run:

carthage update --use-xcframeworks --cache-builds

This will build each one or download a pre-compiled XCFramework.


On your application targets’ General settings tab, in the Frameworks, Libraries, and Embedded Content section, drag and drop each XCFramework you want to use from the ***Carthage/Build*** folder.

Swift Package Manager

Once you have your Swift package set up, adding Alamofire as a dependency is as easy as adding it to the dependencies value of your Package.swift.

dependencies: [
.package(url: "https://github.com/swarm-cloud/SwarmCloudKit.git", branch: "main")
]

Manually

Download Pre-compiled XCFramework

Copy the framework

Unzip files, then drag and drop SwarmCloudKit.xcframework and datachannel_wrapper.xcframework into your Xcode project on your application targets’ General settings tab, in the Frameworks, Libraries, and Embedded Content section.

Integration

In order to allow the loading of distributed content via the local proxy, enable loading data from HTTP in your app by opening your info.plist file as source code and adding the following values below:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

Include

Import SwarmCloudKit in AppDelegate.m:

import SwarmCloudKit

Initialize P2pEngine

Initialize P2pEngine in AppDelegate.m:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let config = P2pConfig(
trackerZone: .Europe, // Set HongKong or USA if you changed zone
playlistTimeOffset: 0.0
)
P2pEngine.setup(token: YOUR_TOKEN, config: config) // replace with your own token
return true
}

Where YOUR_TOKEN is your Customer ID. Please replace it by your own token obtained from console, click here for more information.

note

If the media segment is generated by multiple servers, please add this line to P2pConfig:

config.useStrictHlsSegmentId = true

Usage

When initializing an AVPlayer (or any other video player) instance, before passing it a URL, pass that URL through P2P Engine:

let parsedUrl = P2pEngine.shared.parseStreamUrl("https://your_stream.m3u8")
_player = AVPlayer.init(url: URL(string: parsedUrl)!)

That’s it! SDK should now be integrated into your app.

tip

For macOS development:


Xcode enables sandboxing by default on new applications. Ensure your application's entitlements allows incoming and outgoing connections by marking the respective checkboxes in the Network section.

Demo

A completed example can be found here

Troubleshooting Steps when P2P doesn't work

Click here