internal

package
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 21, 2026 License: Apache-2.0, BSD-3-Clause, MIT Imports: 17 Imported by: 0

Documentation

Index

Constants

View Source
const (
	VP8PayloadType  = 97
	OpusPayloadType = 111
	VP8ClockRate    = 90000
	OpusClockRate   = 48000
	MaxRTPPayload   = 1200
)

Variables

View Source
var (
	WhepURL           string
	WhipURL           string
	DebugMode         bool
	NoFrameValidation bool
)

Functions

func CreateMediaEngine

func CreateMediaEngine(codec string) (*webrtc.MediaEngine, error)

func CreatePeerConnection

func CreatePeerConnection(mediaEngine *webrtc.MediaEngine, eventChan chan<- ConnectionEvent, streamManager *StreamManager) (*webrtc.PeerConnection, error)

func CreateVP8VP9MediaEngine

func CreateVP8VP9MediaEngine() (*webrtc.MediaEngine, error)

func DebugLog

func DebugLog(format string, v ...interface{})

debugLog prints debug messages only when debug mode is enabled

func ExchangeSDPWithWHEP

func ExchangeSDPWithWHEP(peerConnection *webrtc.PeerConnection, url string) error

func ExchangeSDPWithWHIP added in v0.2.0

func ExchangeSDPWithWHIP(peerConnection *webrtc.PeerConnection, url string) error

func MimeTypeToCodec

func MimeTypeToCodec(mimeType string) string

func ParseArgs

func ParseArgs() error

func ParseWhipArgs added in v0.2.0

func ParseWhipArgs() error

func SetupUsage

func SetupUsage()

func SetupWhipUsage added in v0.2.0

func SetupWhipUsage()

Types

type ConnectionEvent added in v0.4.0

type ConnectionEvent struct {
	State ConnectionState
	Error error
}

ConnectionEvent は接続イベントを通知する構造体

type ConnectionState added in v0.4.0

type ConnectionState int

ConnectionState は接続状態を表す

const (
	StateConnecting ConnectionState = iota
	StateConnected
	StateDisconnected
	StateFailed
)

type DefaultRTPProcessor

type DefaultRTPProcessor struct {
	// contains filtered or unexported fields
}

DefaultRTPProcessor は標準的なRTPパケット処理を実装

func (*DefaultRTPProcessor) ProcessRTPPacket

func (p *DefaultRTPProcessor) ProcessRTPPacket(packet *rtp.Packet, codecType string) ([][]byte, error)

ProcessRTPPacket はRTPパケットを処理してメディアデータを抽出

type Frame added in v0.2.0

type Frame struct {
	Type        FrameType
	Data        []byte
	TimestampMs int64
	IsKeyframe  bool
}

type FrameType added in v0.2.0

type FrameType int
const (
	FrameTypeVideo FrameType = iota
	FrameTypeAudio
)

type FrameValidator added in v0.4.0

type FrameValidator struct {
	// contains filtered or unexported fields
}

FrameValidator はデコード済みRGBAフレームの品質を検証する パケットロスによるノイズ・アーティファクトを検出し、 破損フレームの出力を防止する

func NewFrameValidator added in v0.4.0

func NewFrameValidator(width, height int) *FrameValidator

NewFrameValidator は新しいFrameValidatorを作成

func NewFrameValidatorWithThresholds added in v0.4.0

func NewFrameValidatorWithThresholds(width, height int, thresholds ValidationThresholds) *FrameValidator

NewFrameValidatorWithThresholds はカスタム閾値でFrameValidatorを作成

func (*FrameValidator) ResetOnKeyframe added in v0.4.0

func (v *FrameValidator) ResetOnKeyframe()

ResetOnKeyframe はキーフレーム受信時に状態をリセット

func (*FrameValidator) ShouldWaitForKeyframe added in v0.4.0

func (v *FrameValidator) ShouldWaitForKeyframe() bool

ShouldWaitForKeyframe は連続無効フレームが多すぎる場合trueを返す

func (*FrameValidator) UpdateResolution added in v0.4.0

func (v *FrameValidator) UpdateResolution(width, height int)

UpdateResolution は解像度変更時に呼び出す

func (*FrameValidator) ValidateFrame added in v0.4.0

func (v *FrameValidator) ValidateFrame(rgba []byte, keyframe bool) ValidationResult

ValidateFrame はRGBAフレームを検証し、ノイズ/アーティファクトを検出 keyframe=trueの場合、前フレームとの比較をスキップ(キーフレームは基準点)

type MKVReader added in v0.2.0

type MKVReader struct {
	// contains filtered or unexported fields
}

func NewMKVReader added in v0.2.0

func NewMKVReader(reader io.Reader) *MKVReader

func (*MKVReader) ReadFrame added in v0.2.0

func (r *MKVReader) ReadFrame() (*Frame, error)

func (*MKVReader) Start added in v0.2.0

func (r *MKVReader) Start()

func (*MKVReader) VideoHeight added in v0.2.0

func (r *MKVReader) VideoHeight() int

func (*MKVReader) VideoWidth added in v0.2.0

func (r *MKVReader) VideoWidth() int

type OpusPacketizer added in v0.2.0

type OpusPacketizer struct {
	// contains filtered or unexported fields
}

func NewOpusPacketizer added in v0.2.0

func NewOpusPacketizer(ssrc uint32) *OpusPacketizer

func (*OpusPacketizer) Packetize added in v0.2.0

func (p *OpusPacketizer) Packetize(frame []byte, timestampMs int64) *rtp.Packet

type RTPProcessor

type RTPProcessor interface {
	// ProcessRTPPacket はRTPパケットを処理する
	// 返り値は処理されたデータ(複数のNALユニットやフレームを含む可能性がある)
	ProcessRTPPacket(packet *rtp.Packet, codecType string) ([][]byte, error)
}

RTPProcessor はRTPパケットを処理するインターフェース

func NewDefaultRTPProcessor

func NewDefaultRTPProcessor() RTPProcessor

NewDefaultRTPProcessor は新しいRTPプロセッサを作成

type RawVideoMKVWriter

type RawVideoMKVWriter struct {
	// contains filtered or unexported fields
}

RawVideoMKVWriter はVP8/VP9をデコードしてrawvideoとしてMKVに出力するライター

func NewRawVideoMKVWriter

func NewRawVideoMKVWriter(w io.Writer, codecType string) *RawVideoMKVWriter

NewRawVideoMKVWriter は新しいRawVideoMKVWriterを作成

func (*RawVideoMKVWriter) Close

func (w *RawVideoMKVWriter) Close() error

Close はリソースをクリーンアップ

func (*RawVideoMKVWriter) GetValidationStats added in v0.4.0

func (w *RawVideoMKVWriter) GetValidationStats() ValidationStats

GetValidationStats は検証統計を返す

func (*RawVideoMKVWriter) Run

func (w *RawVideoMKVWriter) Run() error

Run はメインループを実行

func (*RawVideoMKVWriter) WriteAudioFrame

func (w *RawVideoMKVWriter) WriteAudioFrame(data []byte, timestamp uint32) error

WriteAudioFrame はオーディオフレームを書き込む

func (*RawVideoMKVWriter) WriteVideoFrame

func (w *RawVideoMKVWriter) WriteVideoFrame(data []byte, timestamp uint32, keyframe bool) error

WriteVideoFrame はビデオフレームをデコードして書き込む

type StreamManager

type StreamManager struct {
	// contains filtered or unexported fields
}

StreamManager はストリーム処理を管理する統合クラス

func NewStreamManager

func NewStreamManager(writer StreamWriter, processor RTPProcessor, maxTimeout time.Duration, mediaReceivedCh chan<- struct{}) *StreamManager

NewStreamManager は新しいストリームマネージャーを作成 maxTimeout: 最大タイムアウト値(タイムアウトは2秒から開始し、1秒ずつ増加してこの値に達する)

func (*StreamManager) AddAudioTrack

func (sm *StreamManager) AddAudioTrack(track *webrtc.TrackRemote)

AddAudioTrack はオーディオトラックを追加

func (*StreamManager) AddVideoTrack

func (sm *StreamManager) AddVideoTrack(track *webrtc.TrackRemote, codecType string)

AddVideoTrack はビデオトラックを追加

func (*StreamManager) Run

func (sm *StreamManager) Run() error

Run はストリーム処理を開始

func (*StreamManager) Stop

func (sm *StreamManager) Stop() error

Stop はストリーム処理を停止

type StreamMuxer

type StreamMuxer interface {
	// AddVideoTrack はビデオトラックを追加
	AddVideoTrack(track *webrtc.TrackRemote, codecType string) error

	// AddAudioTrack はオーディオトラックを追加
	AddAudioTrack(track *webrtc.TrackRemote) error

	// Run はストリーム処理を開始
	Run() error

	// Stop は処理を停止
	Stop() error
}

StreamMuxer は複数のトラックを処理する統合インターフェース

type StreamWriter

type StreamWriter interface {
	// WriteVideoFrame はビデオフレームを書き込む
	WriteVideoFrame(data []byte, timestamp uint32, keyframe bool) error

	// WriteAudioFrame はオーディオフレームを書き込む
	WriteAudioFrame(data []byte, timestamp uint32) error

	// Run はメインループを実行する(必要に応じて)
	Run() error

	// Close はリソースをクリーンアップする
	Close() error
}

StreamWriter は処理されたメディアデータを書き込むインターフェース

type VP8Encoder added in v0.2.0

type VP8Encoder struct {
	// contains filtered or unexported fields
}

func NewVP8Encoder added in v0.2.0

func NewVP8Encoder(width, height int) (*VP8Encoder, error)

func (*VP8Encoder) Close added in v0.2.0

func (e *VP8Encoder) Close()

func (*VP8Encoder) Encode added in v0.2.0

func (e *VP8Encoder) Encode(rgba []byte) ([]byte, bool, error)

type VP8Packetizer added in v0.2.0

type VP8Packetizer struct {
	// contains filtered or unexported fields
}

func NewVP8Packetizer added in v0.2.0

func NewVP8Packetizer(ssrc uint32) *VP8Packetizer

func (*VP8Packetizer) Packetize added in v0.2.0

func (p *VP8Packetizer) Packetize(frame []byte, timestampMs int64, isKeyframe bool) []*rtp.Packet

type ValidationResult added in v0.4.0

type ValidationResult struct {
	IsValid            bool
	Reason             string
	ChangedPixelRatio  float64
	GreenDominantRatio float64
	HistogramDiff      float64
	BlockingScore      float64
}

ValidationResult は検証結果を保持

type ValidationStats added in v0.4.0

type ValidationStats struct {
	TotalFrames       int
	ValidFrames       int
	InvalidFrames     int
	RepeatedFrames    int // lastValidFrameを再利用した回数
	DecodeErrors      int
	LastInvalidReason string
}

ValidationStats は検証統計を保持

type ValidationThresholds added in v0.4.0

type ValidationThresholds struct {
	// フレーム間差分: この割合以上のピクセルが大きく変化したら異常
	MaxChangedPixelRatio float64
	// ピクセル変化の閾値(RGBA各チャンネルの差分合計)
	PixelChangeThreshold int
	// マクロブロッキング: ブロック境界での急激な変化検出閾値
	BlockEdgeThreshold int
	// 緑色フレーム検出: 緑色優位ピクセルの割合閾値
	GreenDominantRatio float64
	// ヒストグラム急変: 前フレームとのヒストグラム差分閾値
	HistogramDiffThreshold float64
	// 連続無効フレーム許容数(これを超えたらキーフレーム待ち)
	MaxConsecutiveInvalid int
}

ValidationThresholds は検証閾値を保持

func DefaultThresholds added in v0.4.0

func DefaultThresholds() ValidationThresholds

DefaultThresholds はデフォルトの検証閾値を返す

Directories

Path Synopsis
Package libwebrtc provides Go bindings for libwebrtc via CGO
Package libwebrtc provides Go bindings for libwebrtc via CGO
Package mkvwriter provides MKV output for decoded video/audio frames
Package mkvwriter provides MKV output for decoded video/audio frames

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL
⌂ 换网址