# Live Stream Support (Flutter)

## iOS

We support live stream on iOS by default. And you could also follow the instructions below to enhance the function of live stream.

### Support low latency live stream

#### Installation

Add the following codes in the `Podfile` of your iOS project.

```ruby
pod 'FireworkVideoIVSSupport', '0.9.0'
```

#### Integration

In your iOS project, you need to call `FireworkVideoSDK.enableIVSPlayback()` in `application(:, didFinishLaunchingWithOptions:) -> Bool` method.

```swift
import FireworkVideo
import FireworkVideoIVSSupport
import fw_flutter_sdk

func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
    FWFlutterSDK.initializeSDK(nil)
    FireworkVideoSDK.enableIVSPlayback()
    
    return true
}
```

## Android

Unlike iOS, starting from V2.0.0, we don't support live stream on Android by default. But you could follow the instructions below to enable and enhance the function of live stream.

#### Add the MainApplication class if you don't have it

```kotlin
class MainApplication: FlutterApplication() {
}
```

Don't forget to add the configuration in the `AndroidManifest.xml` file

```
    <application
        android:name=".MainApplication"
        ...
```

### Support the single-host live stream

Step 1: add the library dependency inside the `dependencies` block in the `firework.gradle.`

```gradle
dependencies {
  implementation "com.firework.external.livestream:singleHostPlayer:+"
  ...
}

configurations.all {
  resolutionStrategy.eachDependency { details ->
    ...
    if (details.requested.group == 'com.firework.external.livestream' && details.requested.name == 'singleHostPlayer') {
      details.useVersion rootProject.ext.get("fwNativeVersion")
    }
    ...
  }
}
```

Step 2: add the following codes to the `MainApplication` class

```kotlin
import com.firework.livestream.singlehost.SingleHostLivestreamPlayerInitializer
import com.fireworksdk.bridge.flutter.FWFlutterSDK

class MainApplication: FlutterApplication() {

  override fun onCreate() {
    super.onCreate()

    // you need to add the module before the sdk init method
    FWFlutterSDK.addLivestreamPlayerInitializer(SingleHostLivestreamPlayerInitializer())
    FWFlutterSDK.init(this)
  }
}
```

## Use modern (v2) livestream player

The modern (v2) livestream player offers a more extensive feature set than the classic (v1) version. For instance, features such as Giveaway, Trivia Giveaway, and AI Copilot are available exclusively in the modern player, and are not supported in the classic player.

<pre class="language-dart"><code class="lang-dart"><strong>// Use modern (v2) livestream player
</strong><strong>FireworkSDK.getInstance().livestreamPlayerDesignVersion =
</strong>    LivestreamPlayerDesignVersion.v2;
</code></pre>

## Show brand logo

We show the more icon(three dots) in the top left corner of the player. You could use `videoPlayerLogoConfiguration` to show the brand logo in the top left corner of the player. The sample codes are:

```dart
// Configure player configuration for VideoFeed widget
final videoPlayerConfiguration = VideoPlayerConfiguration();
videoPlayerConfiguration.videoPlayerLogoConfiguration =
    VideoPlayerLogoConfiguration(
  option: VideoPlayerLogoOption.creator,
  encodedId: "your encoded channel id",
);

VideoFeed(
  source: VideoFeedSource.playlist,
  channel: "your encoded channel id",
  playlist: "your encoded playlist id",
  videoPlayerConfiguration: videoPlayerConfiguration,
);

// Configure player configuration for StoryBlock widget
final storyBlockConfiguration = StoryBlockConfiguration();
storyBlockConfiguration.videoPlayerLogoConfiguration =
    VideoPlayerLogoConfiguration(
  option: VideoPlayerLogoOption.creator,
  encodedId: "your encoded channel id",
);
StoryBlock(
  source: StoryBlockSource.playlist,
  channel: "your encoded channel id",
  playlist: "your encoded playlist id",
  storyBlockConfiguration: storyBlockConfiguration,
);

// Configure player configuration for openVideoPlayer API
OpenVideoPlayerConfiguration openVideoPlayerConfiguration =
    OpenVideoPlayerConfiguration();
openVideoPlayerConfiguration.videoPlayerLogoConfiguration =
    VideoPlayerLogoConfiguration(
  option: VideoPlayerLogoOption.creator,
  encodedId: "your encoded channel id",
);
FireworkSDK.getInstance().openVideoPlayer(
  url: "url",
  config: openVideoPlayerConfiguration,
);
```

For encoded ids, please refer to the following link for more details. Generally, the encoded id for `videoPlayerLogoConfiguration` is the same as the channel id you pass to widgets(such `VideoFeed`, `StoryBlock`)

* [https://app.gitbook.com/o/-MLoGg\_MvRVaJfuPvSpI/s/-MLoGG8m6bokS9YTmS7m/help-articles/encoded-ids](/firework-for-developers/additional-resources/encoded-ids.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.firework.com/firework-for-developers/flutter-sdk/integration-guide-v2/live-stream-support.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
