encoder

package
v0.0.0-...-9941730 Latest Latest
Warning

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

Go to latest
Published: Dec 27, 2024 License: Apache-2.0 Imports: 17 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrInvalidVolume           = errors.New("volumen fuera de los límites (0-512)")
	ErrInvalidFrameDuration    = errors.New("duración de fotograma inválida")
	ErrInvalidPacketLoss       = errors.New("porcentaje de pérdida de paquetes inválido")
	ErrInvalidAudioApplication = errors.New("aplicación de audio inválida")
	ErrInvalidCompressionLevel = errors.New("nivel de compresión fuera de los límites (0-10)")
	ErrInvalidThreads          = errors.New("la cantidad de hilos no puede ser negativa")
	ErrFailedToStartFFMPEG     = errors.New("error al iniciar ffmpeg")
	ErrFailedToReadStdout      = errors.New("error al leer la salida estándar de ffmpeg")
	ErrFailedToReadStderr      = errors.New("error al leer la salida de error estándar de ffmpeg")
)

Functions

This section is empty.

Types

type AudioApplication

type AudioApplication string

AudioApplication representa el tipo de aplicación de audio.

var (
	AudioApplicationVoip     AudioApplication = "voip"     // Aplicación de audio para voz sobre IP (VoIP)
	AudioApplicationAudio    AudioApplication = "audio"    // Aplicación de audio general
	AudioApplicationLowDelay AudioApplication = "lowdelay" // Aplicación de audio con baja latencia

	// StdEncodeOptions Opciones predeterminadas para la codificación de audio.
	StdEncodeOptions = &EncodeOptions{
		Volume:           256,
		Channels:         2,
		FrameRate:        48000,
		FrameDuration:    20,
		Bitrate:          64,
		Application:      AudioApplicationAudio,
		CompressionLevel: 10,
		PacketLoss:       1,
		BufferedFrames:   100,
		VBR:              true,
		StartTime:        0,
	}
)

type EncodeOptions

type EncodeOptions struct {
	Volume           int              // Nivel de volumen del audio (256 = normal)
	Channels         int              // Número de canales de audio
	FrameRate        int              // Frecuencia de muestreo del audio (por ej. 48000 Hz)
	FrameDuration    int              // Duración del marco de audio en ms (puede ser 20, 40 o 60 ms)
	Bitrate          int              // Tasa de bits en kb/s (puede ser de 8 a 128 kb/s)
	PacketLoss       int              // Porcentaje de pérdida de paquetes esperado
	RawOutput        bool             // Salida de opus en crudo (sin metadatos ni bytes mágicos)
	Application      AudioApplication // Aplicación de audio a utilizar
	CoverFormat      string           // Formato de la carátula (por ej. "jpeg")
	CompressionLevel int              // Nivel de compresión (0 - 10), donde 10 es mejor calidad pero más lenta codificación
	BufferedFrames   int              // Tamaño del búfer de cuadros
	VBR              bool             // Si se utiliza VBR (tasa de bits variable) o no
	Threads          int              // Número de hilos a utilizar (0 para automático)
	StartTime        int              // Tiempo de inicio de la secuencia de entrada en segundos
}

EncodeOptions contiene las opciones de configuración para la codificación de audio.

func (*EncodeOptions) PCMFrameLen

func (e *EncodeOptions) PCMFrameLen() int

PCMFrameLen calcula la longitud en cuadros PCM basada en las opciones de codificación. Devuelve el número de muestras de PCM para un cuadro dado.

func (*EncodeOptions) Validate

func (e *EncodeOptions) Validate() error

Validate valida las opciones de codificación para asegurarse de que están dentro de los límites permitidos. Devuelve un error si alguna opción es inválida.

type EncodeSession

type EncodeSession struct {
	sync.Mutex // Mutex para sincronización concurrente
	// contains filtered or unexported fields
}

EncodeSession representa una sesión de codificación de audio.

func EncodeMem

func EncodeMem(r io.Reader, options *EncodeOptions, ctx context.Context, logging logger.Logger) (session *EncodeSession, err error)

EncodeMem crea una nueva sesión de codificación en memoria usando las opciones proporcionadas. Valida las opciones antes de iniciar la sesión. Devuelve la sesión de codificación o un error si las opciones son inválidas.

func (*EncodeSession) FFMPEGMessages

func (e *EncodeSession) FFMPEGMessages() string

FFMPEGMessages devuelve los mensajes de salida de ffmpeg capturados durante la sesión de codificación.

Retorna: - Un string que contiene los mensajes de salida de ffmpeg.

Detalles del funcionamiento: - Adquiere un bloqueo en el mutex para garantizar un acceso seguro a la variable de salida de ffmpeg. - Copia el contenido de la variable de salida de ffmpeg a una variable local. - Libera el bloqueo en el mutex. - Devuelve el contenido de los mensajes de salida de ffmpeg.

func (*EncodeSession) Read

func (e *EncodeSession) Read(p []byte) (n int, err error)

Read lee datos desde el búfer interno del EncodeSession en el slice proporcionado p. Implementa la interfaz io.Reader para permitir la lectura de frames de audio como si fuera un flujo de datos.

Parámetros: - p: Un slice de bytes donde se almacenarán los datos leídos.

Retorna: - El número de bytes leídos y almacenados en p. - Un error si ocurre algún problema durante la lectura, o nil si la operación es exitosa.

Detalles del funcionamiento: - Si el búfer interno tiene suficientes datos para llenar el slice p, lee directamente desde el búfer. - Si el búfer no tiene suficientes datos, lee frames adicionales del canal de frames hasta que haya suficiente contenido en el búfer. - Cada frame leído del canal se escribe en el búfer interno para su posterior lectura. - Si se encuentra con un error al leer un frame, se registra el error y se retorna el error. - Cuando se alcanza el final del archivo (io.EOF), el método deja de leer más frames y continúa con los datos disponibles en el búfer. - Finalmente, lee los datos del búfer interno y los copia en el slice p.

func (*EncodeSession) ReadFrame

func (e *EncodeSession) ReadFrame() (frame []byte, err error)

ReadFrame lee un frame de audio del canal de frames y lo devuelve como un slice de bytes.

Retorna: - Un slice de bytes que contiene los datos del frame leído del canal de frames. - Un error que es io.EOF si el canal está cerrado y no hay más frames disponibles.

Detalles del funcionamiento:

  • Lee un frame del canal de frames. Si el frame es nil, indica que el canal ha sido cerrado y no hay más datos disponibles, en cuyo caso retorna io.EOF.
  • Devuelve los datos del frame como un slice de bytes si la operación es exitosa.

func (*EncodeSession) Stop

func (e *EncodeSession) Stop() error

Stop detiene la sesión de codificación si está en ejecución.

Retorna: - Un error si ocurre algún problema al intentar detener el proceso; nil si la operación es exitosa.

Detalles del funcionamiento:

  • Adquiere un bloqueo en el mutex para asegurar el acceso seguro a los atributos de la sesión.
  • Verifica si la sesión está en ejecución y si el proceso de codificación está activo. Si no es así, retorna un error indicando que la sesión no está corriendo.
  • Intenta detener el proceso de codificación llamando a `Kill` en el proceso. Si ocurre un error durante esta operación, lo registra y lo retorna.
  • Actualiza el estado de la sesión para indicar que ya no está en ejecución.
  • Libera el bloqueo en el mutex antes de retornar.

type EncodeStats

type EncodeStats struct {
	Size     int           // Tamaño del archivo codificado en bytes
	Duration time.Duration // Duración de la codificación
	Bitrate  float32       // Tasa de bits en kb/s
	Speed    float32       // Velocidad de procesamiento en fps (frames por segundo)
}

EncodeStats contiene estadísticas sobre el proceso de codificación.

type Frame

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

Frame representa un marco de audio.

type Metadata

type Metadata struct {
	Opus   *OpusMetadata   `json:"opus"`
	Origin *OriginMetadata `json:"origin"`
}

type OpusMetadata

type OpusMetadata struct {
	Bitrate     int    `json:"abr"`
	SampleRate  int    `json:"sample_rate"`
	Application string `json:"mode"`
	FrameSize   int    `json:"frame_size"`
	Channels    int    `json:"channels"`
	VBR         bool   `json:"vbr"`
}

type OriginMetadata

type OriginMetadata struct {
	Source   string `json:"source"`
	Bitrate  int    `json:"abr"`
	Channels int    `json:"channels"`
	Encoding string `json:"encoding"`
	Url      string `json:"url"`
}

type PacketDecoder

type PacketDecoder struct {
	D *ogg.Decoder // Decodificador de Ogg que procesa los datos de entrada.
	// contains filtered or unexported fields
}

PacketDecoder es una estructura que envuelve un ogg.Decoder para leer fácilmente paquetes individuales de Ogg.

func NewPacketDecoder

func NewPacketDecoder(d *ogg.Decoder) *PacketDecoder

NewPacketDecoder crea una nueva instancia de PacketDecoder. Recibe un puntero a ogg.Decoder y devuelve un puntero a PacketDecoder.

func (*PacketDecoder) Decode

func (p *PacketDecoder) Decode() (packet []byte, newPage ogg.Page, err error)

Decode lee y devuelve el siguiente paquete Ogg del decodificador. Si se agotan los paquetes de la página actual, intenta leer la siguiente página. Devuelve un paquete, la nueva página de Ogg y un error si ocurre.

Jump to

Keyboard shortcuts

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