En electron una subida de YouTube API devuelve el estado 200, y no da ningún error, pero una carga no ocurre. El mismo código funciona en el proyecto NodeJS regular

Estoy tratando de usar el YouTube v3 api de googleapis para subir un vídeo a YouTube. Cuando hago esto los videos. la función de inserción devuelve la siguiente salida (el objeto inferior):image of output

Esto tarda unos 5 segundos en ejecutarse y devuelve el estado 200. Sin embargo, el problema con esto es que en realidad no sube el vídeo, se inserta en mis videos de YouTube, pero no hay datos subidos y YouTube muestra una carga fallida. El problema no se encuentra en la autenticación, ya que puedo solicitar información del canal usando el mismo OAuth2, y no devuelve ningún error.

Lo más raro para mí es que el mismo código usando la misma biblioteca de googleapis ¿Sí? trabajar en un proyecto NodeJS regular. Sube el vídeo correctamente.

¿Alguien sabe qué podría ser diferente para Electron en comparación con NodeJS?

Solicito que sea enviado por Electron: Request body

Función de carga de electrones: https://github.com/RuurdBijlsma/MovieMaker/blob/master/movie-maker/src/plugins/vuex/auth-module.js#L69

async uploadVideo({commit, getters, rootState}) {
        console.log("Upload", filePath, service);
        commit('ytUpload', true);
        commit('ytDone', false);
        commit('ytProgress', 0);
        commit('ytUrl', '');

        let filePath = 'C:/Users/Ruurd/Videos/soep.mp4';
        let fileSize = fs.statSync(filePath).size;
        let title = 'What up gang my new rocet league video here';
        console.log("Uploading", title);
        let res = await service.videos.insert({
            auth: getters.oauth,
            part: 'snippet,status',
            resource: {
                snippet: {
                    title,
                    description: 'how u doing'
                },
                status: {
                    privacyStatus: "unlisted"
                },
            },
            media: {
                mimeType: 'video/mp4',
                body: fs.createReadStream(filePath)
            },
        }, {
            onUploadProgress: function (e) {
                console.log('progress', e.bytesRead / fileSize);
            }
        });
        console.log(res);
    },

Código de subida NodeJS: https://gist.github.com/RuurdBijlsma/bad525ce011a0d08eeece6e02a7d1c5b

async function upload() {
authorize();
let filePath = 'C:/Users/Ruurd/Videos/soep.mp4';
let fileSize = fs.statSync(filePath).size;
let service = google.youtube('v3')
let title = 'test1' + Math.random();
console.log("Uploading", title);
let res = await service.videos.insert({
    auth: oauth2Client,
    part: 'snippet,status',
    resource: {
        snippet: {
            title,
            description: 'test'
        },
        status: {
            privacyStatus: "unlisted"
        },
    },
    media: {
        mimeType: 'video/mp4',
        body: fs.createReadStream(filePath)
    },
}, {
    onUploadProgress: function (e) {
        console.log(e.bytesRead / fileSize);
    }
});
console.log(res);
}

Pregunta hecha hace 3 años, 4 meses, 29 días - Por codexcrafter


3 Respuestas:

  • Terminé moviendo la función de carga al proceso principal en mi aplicación de electrones, y ahora funciona. No estoy seguro de por qué es necesario, sin embargo, uso muchos otros paquetes de Nodo (express, fluent-ffmpeg, electron-context-menu) en mi renderizador y puedo utilizarlos declarando como paquetes de nodo en el config de electronBuilder (externales)

    No es una gran solución imo, pero funciona por ahora. Todavía me parece bastante extraño que no suba completamente sin errores ni advertencias

    Respondida el Dec 17, 2020 a las 15:21 - por coderconqueror

    Votos positivos: 0 | Votos negativos: 0

  • El problema que estás experimentando al subir un vídeo a YouTube utilizando Electron podría estar relacionado con el entorno de ejecución de Electron y algunas limitaciones que puedan estar afectando la carga del vídeo. Aquí hay algunas posibles soluciones y pasos de solución de problemas que puedes probar:

    • Revisar los permisos del entorno de Electron: Asegúrate de que Electron tenga los permisos necesarios para acceder y cargar archivos desde el sistema de archivos. Puedes revisar la configuración de permisos de Electron en el archivo `main.js` o en la configuración de seguridad.
    • Verificar la ruta del archivo: Asegúrate de que la ruta del archivo de vídeo que estás intentando subir sea accesible y correcta en el entorno de Electron. Podrías probar a utilizar una ruta relativa en lugar de una ruta absoluta para evitar posibles problemas de acceso.
    • Manejo de eventos de progreso de carga: Revisa que el manejo de eventos de progresos de carga esté funcionando correctamente en Electron. Puedes añadir más logs o mensajes de depuración para verificar si el evento `onUploadProgress` se está ejecutando y recibiendo los datos de progreso correctamente.
    • Versiones de Google APIs y Electron: Verifica que la versión de las Google APIs que estás utilizando sea compatible con Electron. A veces las diferencias de versiones pueden causar problemas de compatibilidad.
    • Manejo de errores: Añade manejo de errores adicional en tu código para capturar cualquier error que pueda estar ocurriendo durante la carga del vídeo en Electron. Puedes utilizar bloques `try/catch` para manejar excepciones.
    • Otra posibilidad puede ser que haya algún bloqueo en la conexión con el servicio de Google YouTube API: verifica si el tráfico está bloqueado o si hay algún problema de red en Electron que esté impidiendo la correcta subida del vídeo.

    Sería útil realizar pruebas adicionales, agregar mensajes de depuración y manejar adecuadamente los posibles errores para identificar dónde podría estar ocurriendo el problema en Electron y así poder resolverlo.

    Respondida el Dec 18, 2020 a las 15:19 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Posibles diferencias entre Electron y Node.js:

    Mecanismo de red: Electron utiliza Chromium para las funciones de red, mientras que Node.js utiliza su propio motor de red. Esto podría dar lugar a diferencias en el comportamiento de las solicitudes HTTP. Configuración de red: La configuración de red de Electron se basa en la configuración del sistema operativo, mientras que Node.js permite una configuración personalizada. Entorno de ejecución: Electron se ejecuta en un entorno de escritorio, mientras que Node.js se ejecuta en un entorno de servidor. Esto podría dar lugar a diferencias en la forma en que se manejan las conexiones de red y los archivos.

    Pasos para depurar el problema:

    • Verifica la autenticación: Asegúrate de que la autenticación con OAuth2 funcione correctamente tanto en Electron como en Node.js.
    • Compara las solicitudes HTTP: Utiliza una herramienta como Wireshark para capturar y comparar las solicitudes HTTP realizadas por Electron y Node.js. Busca cualquier diferencia en los encabezados, el cuerpo u otros parámetros.
    • Revisa la configuración de red: Compara la configuración de red de Electron (por ejemplo, servidores proxy, firewall) con la configuración de Node.js. Asegúrate de que no haya restricciones que impidan la carga del vídeo.
    • Prueba un archivo de vídeo diferente: Intenta cargar un archivo de vídeo diferente para descartar cualquier problema específico con el archivo original.
    • Usa la API de depuración de Electron: Utiliza la API de depuración de Electron para obtener más información sobre el comportamiento de red del proceso de Electron.
    • Verifica los permisos de archivos: Asegúrate de que Electron tenga los permisos necesarios para acceder al archivo de vídeo en el sistema de archivos.

    Otras consideraciones:

    Intenta utilizar una versión más reciente de la biblioteca googleapis para Electron. Comprueba si hay conflictos de versiones entre las distintas bibliotecas que utilizas en Electron. Considera utilizar una biblioteca de carga de vídeos de terceros que esté específicamente diseñada para Electron.

    Respondida el Dec 18, 2020 a las 15:28 - por Gemini

    Votos positivos: 0 | Votos negativos: 0