Files
2026-02-11 17:51:48 +09:00

2.4 KiB

HaishinKit

This is the main module.

🔍 Overview

Provides camera and microphone mixing functionality required for live streaming.
It also offers common processing across each module.

Module Structure

Module Description
HaishinKit This module.
RTMPHaishinKit Provides the RTMP protocol stack.
SRTHaishinKit Provides the SRT protocol stack.
RTCHaishinKit Provides the WebRTC WHEP/WHIP protocol stack. Currently in alpha.
MoQTHaishinKit Provides the MoQT protocol stack. Currently in alpha.

🎨 Features

The following features are available:

  • Live Mixing
    • Video Mixing
      • Treats camera video and still images as a single stream source.
    • Audio Mixing
      • Combines different microphone audio sources into a single audio stream source.
  • Session
    • Provides a unified API for protocols such as RTMP, SRT, WHEP, and WHIP.

📖 Usage

Live Mixing

let mixer = MediaMixer()

Task {
  do {
    // Attaches the microphone device.
    try await mixer.attachAudio(AVCaptureDevice.default(for: .audio))
  } catch {
    print(error)
  }

  do {
    // Attaches the camera device.
    try await mixer.attachVideo(AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back))
  } catch {
    print(error)
  }

  // Associates the stream object with the MediaMixer.
  await mixer.addOutput(stream)
  await mixer.startRunning()
}

StreamSession API

Provides a unified API for implementing clients with RTMP and SRT. Retry handling is also performed internally by the API.

Preparation

import HaishinKit
import RTMPHaishinKit
import SRTHaishinKit

Task {
  await StreamSessionBuilderFactory.shared.register(RTMPSessionFactory())
  await StreamSessionBuilderFactory.shared.register(SRTSessionFactory())
}

Make StreamSession

RTMP Please provide the RTMP connection URL combined with the streamName.

let session = try await StreamSessionBuilderFactory.shared.make(URL(string: "rtmp://hostname/appName/stramName"))
  .setMode(.publish)
  .build()

SRT

let session = try await StreamSessionBuilderFactory.shared.make(URL(string: "srt://hostname:448?stream=xxxxx"))
  .setMode(.playback)
  .build()

Connecting

Used for publishing or playback.

try session.connect {
  print("on disconnected")
}