Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
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 OriginMetadata ¶
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.