Desarrollo de audio y video Qt Almacenamiento de video de 13 mpv

I. Introducción

Usar mpv para almacenar videos y guardar archivos de video nunca ha sido tan conveniente. Simplemente configure la ruta del archivo correspondiente al atributo stream-record. Querida, una línea de código, tan simple y hermosa, no puedo creerlo. En mi opinión, mpv no solo es compatible con los principales sistemas operativos win, linux, mac tres, sino que también es compatible con Android IOS de teléfonos móviles, etc., especialmente con una variedad de linux embebidos, recuerde que vlc quiere realizar una compilación cruzada con éxito en linux embebidos , Es difícil llegar al cielo. Hay demasiadas dependencias en varios complementos. Hasta que te rindas, es más conveniente en el sistema Linux X86, y en esta área, mpv es simplemente un vlc, la línea de comando directa está bien Instálelo en linux embebido, el super decodificador ffmpeg incorporado le permite llamar a mpv directamente desde la línea de comandos para reproducir audio y video. Esto es muy útil en algunos escenarios donde Qt no puede reproducir audio y video en linux embebido. El mpv se usa en la placa Zhi H3 para reproducir audio y video La decodificación predeterminada de la GPU hace que la CPU ocupe el suelo polar.

Los artículos anteriores han escrito sobre el almacenamiento de video de vlc y el almacenamiento de video de ffmpeg. Ambos admiten el almacenamiento como un archivo de video y el almacenamiento de tiempo como diferentes archivos de video al mismo tiempo. Esta función adopta la misma estrategia, luego establece un temporizador. Por ejemplo, si el almacenamiento de tiempo está activado, detenga la grabación cuando llegue el momento, luego reinicie la grabación y restablezca el nuevo nombre del archivo de video. Esto se logra. Lo mismo se hace aquí en mpv. Primero configure el atributo stream- Si el registro es una cadena vacía, significa detener la grabación y luego restablecer el atributo stream-record a un nuevo nombre de archivo.

2. Características

  1. Transmisión de video de reproducción en tiempo real multiproceso + video local, etc.
  2. Soporta windows + linux + mac.
  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 si guardar en archivo y nombre de archivo.
  6. Puede arrastrar archivos directamente al control mpvwidget para reproducirlos.
  7. Admite transmisiones de video comunes como h265 video stream + rtmp.
  8. Puede pausar y reanudar la reproducción.
  9. Admite el almacenamiento de archivos de video individuales y el almacenamiento de tiempo de archivos de video.
  10. Personalice la barra flotante superior, envíe una notificación de señal de clic y establezca si desea habilitarla.
  11. Puede establecer el relleno de estiramiento de la pantalla o el relleno de igual proporción.
  12. Puede tomar capturas de pantalla (imágenes originales) y capturas de pantalla de videos.
  13. El archivo de video almacena archivos MP4.
  14. Admite decodificación rígida como qsv, dxva2, d3d11va, etc.

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

void MpvThread::initSave()
{
    if (!saveFile) {
        return;
    }

    if (saveInterval == 0) {
        saveVideo(fileName);
    }
}

void MpvThread::saveVideo()
{
    if (!saveFile) {
        return;
    }

    //重新设置文件名称
    QString dirName = QString("%1/%2").arg(savePath).arg(QDATE);
    newDir(dirName);
    fileName = QString("%1/%2_%3.mp4").arg(dirName).arg(fileFlag).arg(STRDATETIME);
    saveVideo(fileName);
}

void MpvThread::saveVideo(const QString &fileName)
{
    if (mpvPlayer) {
        //转成平台的路径,否则中文目录可能不认识
        QString file = QDir::toNativeSeparators(fileName);
        QByteArray data = file.toUtf8();
        setValue("stream-record", "");
        setValue("stream-record", data.constData());
    }
}

Supongo que te gusta

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