Ajuste de volumen de 25 ffmpeg de desarrollo de audio y video Qt

I. Introducción

La mayoría de las personas manejan al alcance de la mano las funciones básicas de reproducir, cerrar, pausar y continuar con el audio y el video. En cuanto al ajuste de volumen, todavía me salvé un poco la curva. Al principio, planeé usar la API de cada sistema para manejarlo. Siéntese. Descubrí que no es bueno. El soporte del sistema no es perfecto. Por ejemplo, algunas API limitan win7, pero XP no, y esto controla el volumen global, no es bueno. La mayoría de las veces, es necesario controlar el volumen de los medios que se están reproduciendo actualmente. Reproductores como vlc y mpv también han tenido este tipo de análisis de escena al procesar el sonido. Más tarde, también probé el uso del código de filtro de ffmpeg para controlar el valor de decibelios de los datos de audio. Es más engorroso y la cantidad de código es grande, lo que no es conveniente para que los principiantes aprendan. Por fin, pensé en encontrar la función de QAudioOutput para ver si hay alguna función de volumen. Realmente vino del cinturón, y el amor por Qt ha aumentado en unas pocas décimas. Lo que debería notarse aquí es el valor de volumen de QAudioOutput. El parámetro es un tipo doble en el rango de 0-1, no un valor de 0-100 para reproductores como vlc, por lo que debe convertirlo usted mismo.
Si obtiene el control de volumen, entonces la configuración de silencio es, por supuesto, minutos, nada más que memorizar el volumen anterior, y luego establecer el volumen en 0, y establecer automáticamente el volumen al último valor de volumen memorizado al activar el sonido.

2. Características

  1. Reproducción multiproceso en tiempo real de flujo de video + video local + cámara USB, etc.
  2. Admite windows + linux + mac, admite ffmpeg3 y ffmpeg4, admite 32 bits y 64 bits.
  3. Imágenes de pantalla multiproceso, no atascadas en la interfaz principal.
  4. Vuelva a conectar la cámara web automáticamente.
  5. Puede establecer el tamaño del borde, el desplazamiento y el color del borde.
  6. Puede establecer si desea dibujar etiquetas OSD, es decir, etiquetar texto o imágenes y posiciones de etiquetas.
  7. Se pueden configurar dos posiciones y estilos de OSD.
  8. Puede establecer si guardar en archivo y nombre de archivo.
  9. Puede arrastrar el archivo directamente al control ffmpegwidget para reproducirlo.
  10. Admite transmisiones de video comunes como h265 video stream + rtmp.
  11. Puede pausar y reanudar la reproducción.
  12. Admite el almacenamiento de archivos de video individuales y el almacenamiento de tiempo de archivos de video.
  13. Personalice la barra flotante superior, envíe una notificación de señal de clic y establezca si desea habilitarla.
  14. Puede establecer el relleno de estiramiento de la pantalla o el relleno de igual proporción.
  15. Puede configurar la decodificación para que tenga prioridad de velocidad, prioridad de calidad y procesamiento de ecualización.
  16. Puede tomar capturas de pantalla (imágenes originales) y capturas de pantalla de videos.
  17. El almacenamiento de archivos de video admite archivos MP4 y de flujo desnudo.
  18. El audio y el video están perfectamente sincronizados, utilizando una estrategia de sincronización de reloj externo.
  19. Soporte buscar para localizar la posición de reproducción.
  20. Admite decodificación rígida como qsv, dxva2, d3d11va, etc.
  21. Admite OpenGL para extraer datos de video, uso de CPU muy bajo.
  22. Admite Android y Linux integrado, solo compila de forma cruzada.

Tres, representaciones

Inserte la descripción de la imagen aquí

Cuatro sitios relacionados

  1. Sitio nacional: https://gitee.com/feiyangqingyun/QWidgetDemo
  2. Sitio internacional: https://github.com/feiyangqingyun/QWidgetDemo
  3. Página de inicio personal: https://blog.csdn.net/feiyangqingyun
  4. Página de inicio de Zhihu: https://www.zhihu.com/people/feiyangqingyun/
  5. Dirección de experiencia: https://blog.csdn.net/feiyangqingyun/article/details/97565652

Cinco, el código central

bool FFmpegThread::getMute()
{
    return (getVolume() == 0);
}

int volume = 0;
void FFmpegThread::setMute(bool mute)
{
    //先记住之前的音量以便重新设置
    if (mute) {
        volume = getVolume();
        setVolume(0);
    } else {
        setVolume(volume);
    }
}

int FFmpegThread::getVolume()
{
    if (this->isRunning()) {
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
        return audioOutput->volume() * 100;
#endif
    } else {
        return 0;
    }
}

void FFmpegThread::setVolume(int volume)
{
    if (this->isRunning()) {
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
        //查阅手册说范围值是 0.0 - 1.0
        audioOutput->setVolume((float)volume / 100.0);
#endif
    }
}

Supongo que te gusta

Origin blog.csdn.net/feiyangqingyun/article/details/108792513
Recomendado
Clasificación