Live + s3 + baseurl

Salut,

Nous venons de basculer notre stockage vers du s3. Cela fonctionne correctement (la migration des videos également), pour les videos privées et publiques.
Pour ces dernières, nous passons par un serveur qui fait rôle de CDN (sous nginx), que nous avons donc configuré en baseurl (s3. xxxx .fr) dans la section object de la configuration. Cela fonctionne correctement (c’est très appréciable).

notre url de peertube est tubetest xxxx fr
notre url de « cdn » (proxy s3) est s3. xxxx .fr
le s3 est un s3 OVH
Par contre, cela ne fonctionne pas pour le live. Voici l’erreur :

{« level »:« info »,« message »:« rtmp://127.0.0.1:1935/live/789cf467-8605-4e26-a656-b7dda04ef6d6 probing took 1701 ms (bitrate: 3064000, fps: 25, resolution: 1080) »,« label »:« tubetest xxxxxx fr:443 »,« tags »:[« live »,« WPLFLE8C »,« 18389516-1273-48cc-91dd-4fa9987d170e »],« timestamp »:« 2023-03-10T16:05:21.092Z »}{« level »:« info »,« message »:« Will mux/transcode live video of original resolution 1080. »,« label »:« tubetest. xxxxx .fr:443 »,« allResolutions »:[360,720],« tags »:[« live »,« WPLFLE8C »,« 18389516-1273-48cc-91dd-4fa9987d170e »],« timestamp »:« 2023-03-10T16:05:21.094Z »}{« err »:{« stack »:« TypeError: Cannot read properties of null (reading ‹ replace ›)\n at replaceByBaseUrl (/var/www/peertube/versions/peertube-v5.0.1/dist/server/lib/object-storage/urls.js:40:20)\n at getHLSPublicFileUrl (/var/www/peertube/versions/peertube-v5.0.1/dist/server/lib/object-storage/urls.js:22:12)\n at VideoStreamingPlaylistModel.getMasterPlaylistObjectStorageUrl (/var/www/peertube/versions/peertube-v5.0.1/dist/server/models/video/video-streaming-playlist.js:129:57)\n at VideoStreamingPlaylistModel.getMasterPlaylistUrl (/var/www/peertube/versions/peertube-v5.0.1/dist/server/models/video/ video-streaming-playlist.js:119:29)\n at VideoStreamingPlaylistModel.assignP2PMediaLoaderInfoHashes (/var/www/peertube/versions/peertube-v5.0.1/dist/server/models/video/video-streaming-playlist.js:113:40)\n at LiveManager. (/var/www/peertube/versions/peertube-v5.0.1/dist/server/lib/live/ live-manager.js:351:22)\n at Generator.next ()\n at fulfilled (/var/www/peertube/versions/peertube-v5.0.1/node_modules/tslib/tslib.js:115:62)\n at runMicrotasks ()\n at processTicksAndRejections (node:internal/process/task_queues:96:5) »,« message »:« Cannot read properties of null (reading ‹ replace ›) »},« tags »:[« live »,« WPLFLE8C »],« level »:« error »,« message »:« Cannot handle sessions. »,« label »:« tubetest xxxxxxx .fr:443 »,« timestamp »:« 2023-03-10T16:05:21.108Z »}

Bonjour,

C’est un bug qui va être corrigé dans la 5.1 de PeerTube qui sort dans une semaine environ.

2 Likes

merci et bonne journée !

Salut, suite à la mise à jour en 5.1, nous n’avons effectivement plus cette erreur. Mais cela ne fonctionne toujours pas :

  • Si on a le plugin peertube-plugin-transcoding-custom-quality, le live (avec stockage s3, peertube 5.1, ffmpeg 5.1) donne l’erreur :
{"level":"info","message":"Will mux/transcode live video of original resolution 1080.","label":"tubexxxxxxxxxxx.fr:443","allResolutions":[360,720],"tags":["live","UQ824ZNO","18389516-1273-48cc-91dd-4fa9987d170e"],"timestamp":"2023-03-31T13:08:20.081Z"}
{"err":{"stack":"ReferenceError: fps is not defined
at buildLive (/var/www/peertube/storage/plugins/node_modules/peertube-plugin-transcoding-custom-quality/main.js:28:60)
at /var/www/peertube/versions/peertube-v5.1.0/dist/server/helpers/ffmpeg/ffmpeg-encoders.js:63:34
at Generator.next (<anonymous>)
at fulfilled (/var/www/peertube/versions/peertube-v5.1.0/node_modules/tslib/tslib.js:164:62)","message":"fps is not defined"},"tags":["live","UQ824ZNO","18389516-1273-48cc-91dd-4fa9987d170e"],"level":"error","message":"Cannot run muxing.","label":"tubexxxxxxxxxx.fr:443","timestamp":"2023-03-31T13:08:20.141Z"}
  • Si on désactive le plugin, alors cela fonctionne pendant 10s, puis on a l’erreur :
"stackTrace":"Unknown segment name 1-000027.ts in segment validator\nError: Unknown segment name 1-000027.ts in segment validator\n    at https://tubexxxxxx.fr/client/fr-FR/9325.582c013f69d4b2c5.js:1:159547\n    at Generator.next (<anonymous>)
at e (https://tubexxxxxx.fr/client/fr-FR/main.6feb00aeda3fe6ea.js:3:1273320)
at l (https://tubexxxxxx.fr/client/fr-FR/main.6feb00aeda3fe6ea.js:3:1273522)
at i.invoke (https://tubexxxxxx.fr/client/fr-FR/polyfills.0532020c31aa9a62.js:1:35768)
at lt.run (https://tubexxxxxx.fr/client/fr-FR/polyfills.0532020c31aa9a62.js:1:31056)
at https://tubexxxxxx.fr/client/fr-FR/polyfills.0532020c31aa9a62.js:1:46022)
at i.invokeTask (https://tubexxxxxx.fr/client/fr-FR/polyfills.0532020c31aa9a62.js:1:36388)
at lt.runTask (https://tubexxxxxx.fr/client/fr-FR/polyfills.0532020c31aa9a62.js:1:31696)
at H (https://tubexxxxxx.fr/client/fr-FR/polyfills.0532020c31aa9a62.js:1:38433)","url":"https://tubexxxxxx.fr/w/3ZtruhL5XwS7pcnk2EBsTy","level":"error","message":"Client log: Segment https://s3.reseau-canope.fr/peertubetest/hls/18389516-1273-48cc-91dd-4fa9987d170e/master.m3u8+V1+27 error.","label":"tubexxxxxx.fr:443","timestamp":"2023-03-31T13:19:19.393Z"}

"url":"https://tubexxxxxx.fr/w/3ZtruhL5XwS7pcnk2EBsTy","level":"warn","message":"Client log: HLS.js error: networkError - fatal: false - fragLoadError","label":"tubexxxxxx.fr:443","timestamp":"2023-03-31T13:19:19.391Z"}

Bonjour,

J’ai corrigé le bug du plugin (mettre à jour en 0.0.3). Pour le second soucis, vous pouvez partager le lien d’un tel live que je vois ce qui se passe ?

Voici le lien vers notre tube (instance de test) sous la 5.1 :
(suppression des liens obsolètes)

Je streamerai un flux à 16h aujourd’hui.
Le plugin transcoding-custom-quality est en 0.0.3 (sur Excellent) et le transcodage VOD et Live sont tous les deux réglés sur le plugin « custom-quality ».

Merci

Comme j’avais 5 min, je viens de refaire un test : ce qui est très étrange c’est que je suis en train de streamer, et sur Peertube, le live diffuse une petite boucle de 30s (sur une feuille de papier avec le bruit de mon clavier en arrière plan) qui correspond à l’un de nos tests de la semaine dernière.
Or j’ai vérifié, le live est bien un récurrent, il ne devrait donc pas y avoir ce « morceau » en replay, non ?
En tout cas je diffuse toujours à cet instant si tu vas y jeter un oeil…

donc en gros, il ne sort pas de cette boucle de 30s, même en diffusant un nouveau live ?
A noter que : « (la nature récurrente fait que l’URL ne change pas d’un test à l’autre, en revanche il n’est pas possible de visionner en replay, ni de télécharger la vidéo à l’issue du direct). »

Comme cela reste la même url, c’est peut être un problème de cache

Je n’ai malheureusement pas vu de stream lancé.

J’ai créé un live tout neuf pour tester : il a fonctionné 3 secondes, puis s’est arrêté (côté Peertube).
Et maintenant je revois la même boucle de 3s à chaque fois que je relance la lecture sur Peertube

Edit : quand je streame (depuis mon téléphone), le bouton de lecture apparaît bien côté Peertube sur le player, mais ça relance à chaque fois le petit bout de 3s.
Si je coupe le streame depuis mon téléphone, le bouton de lecture disparait sur Peertube.
Il ré-apparaît dès que je relance le streame, mais en diffusant tjs ces mêmes 3s (et pas le nouveau plan du téléphone que j’ai déplacé entre temps).

EDIT 2 : je teste ce même flux du téléphone vers notre instance de PROD (elle sous 5.0.1 et non S3) : là ça semble fonctionner normalement.

Il faudrait laisser le stream actif indéfiniment que je puisse reproduire.

Hello Chocobozzz, je te propose de m’indiquer un créneau horaire (aux heures de bureau) la semaine prochaine pour que je lance plusieurs tests au moment où tu peux t’y pencher.
En attendant, on va continuer nos investigations pour essayer de circonscrire ce qui buggue.
En l’état, nos instances sont :

  • TubeTEST : Peertube 5.1, Debian 11, Redis 7, ffmpeg 5.1, stockage S3

  • Tube (la PROD) : Peertube 5.1, Debian 11, Redis 6.0, ffmpeg 5.1, stockage S3

A suivre…

Hello @Chocobozzz, je suis en train de streamer sur nos 2 instances, où il y a maintenant le même comportement problématique (alors que ça fonctionnait normalement sur la PROD lorsqu’elle était encore sous 5.0.1 et un stockage NON S3).

EDIT : j’ai coupé les 2 live. Le problème persiste.
Je vois plusieurs erreurs :

error[07/04/2023 14:31:54] Client log: Segment https://s3.XXXXX.fr/peertube/streaming-playlistshls/d203c4a7-c3fa-4ad6-bc4c-d1325baa8894/master.m3u8+V0+1 error.
{
  "tags": [
    "client"
  ],
  "username": "XXXXXXX",
  "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
  "stackTrace": "Unknown segment name 0-000001.ts in segment validator\nError: Unknown segment name 0-000001.ts in segment validator\n    at https://tube.XXXXX.fr/client/fr-FR/9325.582c013f69d4b2c5.js:1:159547\n    at Generator.next (<anonymous>)\n    at e (https://tube.XXXXX.fr/client/fr-FR/main.6feb00aeda3fe6ea.js:3:1273320)\n    at l (https://tube.XXXXX.fr/client/fr-FR/main.6feb00aeda3fe6ea.js:3:1273522)\n    at i.invoke (https://tube.XXXXX.fr/client/fr-FR/polyfills.0532020c31aa9a62.js:1:35768)\n    at lt.run (https://tube.XXXXX.fr/client/fr-FR/polyfills.0532020c31aa9a62.js:1:31056)\n    at https://tube.XXXXX.fr/client/fr-FR/polyfills.0532020c31aa9a62.js:1:46022\n    at i.invokeTask (https://tube.XXXXX.fr/client/fr-FR/polyfills.0532020c31aa9a62.js:1:36388)\n    at lt.runTask (https://tube.XXXXX.fr/client/fr-FR/polyfills.0532020c31aa9a62.js:1:31696)\n    at H (https://tube.XXXXX.fr/client/fr-FR/polyfills.0532020c31aa9a62.js:1:38433)",
  "url": "https://tube.XXXXX.fr/w/rW9kz1KkfDyVy8xLUAA6HE"
}
error[07/04/2023 16:13:55] Cannot store TS segment /var/www/peertube/storage/streaming-playlists/hls/d203c4a7-c3fa-4ad6-bc4c-d1325baa8894/0-001032.ts in object storage```
{
  "err": {
    "stack": "Error: ENOENT: no such file or directory, open '/var/www/peertube/storage/streaming-playlists/hls/d203c4a7-c3fa-4ad6-bc4c-d1325baa8894/0-001032.ts'",
    "message": "ENOENT: no such file or directory, open '/var/www/peertube/storage/streaming-playlists/hls/d203c4a7-c3fa-4ad6-bc4c-d1325baa8894/0-001032.ts'",
    "errno": -2,
    "code": "ENOENT",
    "syscall": "open",
    "path": "/var/www/peertube/storage/streaming-playlists/hls/d203c4a7-c3fa-4ad6-bc4c-d1325baa8894/0-001032.ts"
  },
  "tags": [
    "live",
    "SZO8RBM4",
    "d203c4a7-c3fa-4ad6-bc4c-d1325baa8894"
  ]
}

autre erreur :

{
  "err": {
    "stack": "OperationAborted: A conflicting conditional operation is currently in progress against this resource. Please try again.\n    at throwDefaultError (/var/www/peertube/versions/peertube-v5.1.0/node_modules/@aws-sdk/smithy-client/dist-cjs/default-error-handler.js:8:22)\n    at deserializeAws_restXmlPutObjectCommandError (/var/www/peertube/versions/peertube-v5.1.0/node_modules/@aws-sdk/client-s3/dist-cjs/protocols/Aws_restXml.js:5782:43)\n    at runMicrotasks (<anonymous>)\n    at processTicksAndRejections (node:internal/process/task_queues:96:5)\n    at async /var/www/peertube/versions/peertube-v5.1.0/node_modules/@aws-sdk/middleware-serde/dist-cjs/deserializerMiddleware.js:7:24\n    at async /var/www/peertube/versions/peertube-v5.1.0/node_modules/@aws-sdk/middleware-signing/dist-cjs/middleware.js:14:20\n    at async /var/www/peertube/versions/peertube-v5.1.0/node_modules/@aws-sdk/middleware-retry/dist-cjs/retryMiddleware.js:27:46\n    at async /var/www/peertube/versions/peertube-v5.1.0/node_modules/@aws-sdk/middleware-flexible-checksums/dist-cjs/flexibleChecksumsMiddleware.js:58:20\n    at async /var/www/peertube/versions/peertube-v5.1.0/node_modules/@aws-sdk/middleware-logger/dist-cjs/loggerMiddleware.js:5:22\n    at async Promise.all (index 0)\n    at async Upload.__uploadUsingPut (/var/www/peertube/versions/peertube-v5.1.0/node_modules/@aws-sdk/lib-storage/dist-cjs/Upload.js:66:26)\n    at async Upload.__doConcurrentUpload (/var/www/peertube/versions/peertube-v5.1.0/node_modules/@aws-sdk/lib-storage/dist-cjs/Upload.js:129:28)\n    at async Promise.all (index 0)\n    at async Upload.__doMultipartUpload (/var/www/peertube/versions/peertube-v5.1.0/node_modules/@aws-sdk/lib-storage/dist-cjs/Upload.js:211:9)\n    at async Upload.done (/var/www/peertube/versions/peertube-v5.1.0/node_modules/@aws-sdk/lib-storage/dist-cjs/Upload.js:39:16)",
    "name": "OperationAborted",
    "$fault": "client",
    "$metadata": {
      "httpStatusCode": 409,
      "requestId": "txb2cfe5247e0342eeb47fb-00642eea1d",
      "extendedRequestId": "txb2cfe5247e0342eeb47fb-00642eea1d",
      "attempts": 1,
      "totalRetryDelay": 0
    },
    "Code": "OperationAborted",
    "RequestId": "txb2cfe5247e0342eeb47fb-00642eea1d",
    "message": "A conflicting conditional operation is currently in progress against this resource. Please try again.",
    "$response": {
      "statusCode": 409,
      "headers": {
        "content-type": "application/xml",
        "x-amz-id-2": "txb2cfe5247e0342eeb47fb-00642eea1d",
        "x-amz-request-id": "txb2cfe5247e0342eeb47fb-00642eea1d",
        "x-trans-id": "txb2cfe5247e0342eeb47fb-00642eea1d",
        "x-openstack-request-id": "txb2cfe5247e0342eeb47fb-00642eea1d",
        "date": "Thu, 06 Apr 2023 15:49:52 GMT",
        "transfer-encoding": "chunked",
        "connection": "keep-alive"
      },
      "body": {
        "_readableState": {
          "objectMode": false,
          "highWaterMark": 16384,
          "buffer": {
            "head": null,
            "tail": null,
            "length": 0
          },
          "length": 0,
          "pipes": [],
          "flowing": false,
          "ended": true,
          "endEmitted": true,
          "reading": false,
          "constructed": true,
          "sync": false,
          "needReadable": false,
          "emittedReadable": false,
          "readableListening": false,
          "resumeScheduled": false,
          "errorEmitted": false,
          "emitClose": true,
          "autoDestroy": true,
          "destroyed": true,
          "errored": null,
          "closed": true,
          "closeEmitted": true,
          "defaultEncoding": "utf8",
          "awaitDrainWriters": null,
          "multiAwaitDrain": false,
          "readingMore": false,
          "dataEmitted": true,
          "decoder": null,
          "encoding": null
        },
        "_events": {},
        "_eventsCount": 2,
        "socket": null,
        "httpVersionMajor": 1,
        "httpVersionMinor": 1,
        "httpVersion": "1.1",
        "complete": true,
        "rawHeaders": [
          "Content-Type",
          "application/xml",
          "x-amz-id-2",
          "txb2cfe5247e0342eeb47fb-00642eea1d",
          "x-amz-request-id",
          "txb2cfe5247e0342eeb47fb-00642eea1d",
          "X-Trans-Id",
          "txb2cfe5247e0342eeb47fb-00642eea1d",
          "X-Openstack-Request-Id",
          "txb2cfe5247e0342eeb47fb-00642eea1d",
          "Date",
          "Thu, 06 Apr 2023 15:49:52 GMT",
          "Transfer-Encoding",
          "chunked",
          "Connection",
          "keep-alive"
        ],
        "rawTrailers": [],
        "aborted": false,
        "upgrade": false,
        "url": "",
        "method": null,
        "statusCode": 409,
        "statusMessage": "Conflict",
        "client": {
          "_tlsOptions": {
            "pipe": false,
            "secureContext": {
              "context": {}
            },
            "isServer": false,
            "requestCert": true,
            "rejectUnauthorized": true,
            "session": {
              "type": "Buffer",
              "data": [
                48,
                130,
                9,
                64,
                2,

...... et ça continue sur des milliers de lignes...

                    178,
                    45
                  ]
                }
              },
              "list": [
                "peertube.s3.XXXXX.ovh.net:443:::::::::::::::::::::"
              ]
            }
          },
          "method": "PUT",
          "path": "/streaming-playlistshls/d203c4a7-c3fa-4ad6-bc4c-d1325baa8894/segments-sha256.json?x-id=PutObject",
          "_ended": true,
          "aborted": false,
          "timeoutCb": null,
          "upgradeOrConnect": false,
          "parser": null,
          "maxHeadersCount": null,
          "reusedSocket": true,
          "host": "peertube.s3.XXXXXX.ovh.net",
          "protocol": "https:"
        }
      }
    }
  }
}

Une autre :

error[07/04/2023 14:18:26] Client log: NG0908
{
  "tags": [
    "client"
  ],
  "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.5563.146 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
  "stackTrace": "NG0908\nError: NG0908\n    at new gs (https://tube.xxxxx.fr/client/en-US/main.fca463a4dd8db6d1.js:3:850644)\n    at E0 (https://tube.xxxxx.fr/client/en-US/main.fca463a4dd8db6d1.js:3:857949)\n    at t.bootstrapModuleFactory (https://tube.xxxxx.fr/client/en-US/main.fca463a4dd8db6d1.js:3:857961)\n    at https://tube.xxxxx.fr/client/en-US/main.fca463a4dd8db6d1.js:3:858978",
  "url": "https://tube.xxxxx.fr/videos/watch/a85b583e-5e61-4460-9763-ecc336675501"
}
1 Like