Ensure local actors preferredName don't already exist
authorChocobozzz <me@florianbigard.com>
Thu, 5 Dec 2019 13:57:14 +0000 (14:57 +0100)
committerChocobozzz <me@florianbigard.com>
Thu, 5 Dec 2019 13:57:14 +0000 (14:57 +0100)
Before applying this commit, check you don't have duplicates local
actors in your database:

select "preferredUsername" from actor where "serverId" is null group by "preferredUsername" having count(*) > 0

If you have some results, it seems you have duplicate channels/accounts.
For every entry, you'll have to change the preferredUsername of the
entry you want (so they are unique). The updated actors could have some
federations issues. Sorry.

server/models/activitypub/actor.ts
shared/models/videos/video-resolution.enum.ts

index 42a24b58380ed2aa0ae00dfc5b96f4a58bfece44..66a13b857e028f1f2936b8ddf403439d644acaa4 100644 (file)
@@ -48,6 +48,7 @@ import {
   MActorWithInboxes
 } from '../../typings/models'
 import * as Bluebird from 'bluebird'
+import { Op } from 'sequelize'
 
 enum ScopeNames {
   FULL = 'FULL'
@@ -115,7 +116,19 @@ export const unusedActorAttributesForAPI = [
     },
     {
       fields: [ 'preferredUsername', 'serverId' ],
-      unique: true
+      unique: true,
+      where: {
+        serverId: {
+          [Op.ne]: null
+        }
+      }
+    },
+    {
+      fields: [ 'preferredUsername' ],
+      unique: true,
+      where: {
+        serverId: null
+      }
     },
     {
       fields: [ 'inboxUrl', 'sharedInboxUrl' ]
index dc53294f6c96bc3e58f21dfb454148c3bc05e58f..98ab3eed2466370c21ae1e82782d5e8c05192e60 100644 (file)
@@ -15,7 +15,7 @@ export enum VideoResolution {
  *
  * Sources for individual quality levels:
  * Google Live Encoder: https://support.google.com/youtube/answer/2853702?hl=en
- * YouTube Video Info (tested with random music video): https://www.h3xed.com/blogmedia/youtube-info.php
+ * YouTube Video Info: youtube-dl --list-formats, with sample videos
  */
 function getBaseBitrate (resolution: VideoResolution) {
   switch (resolution) {
@@ -25,28 +25,28 @@ function getBaseBitrate (resolution: VideoResolution) {
 
     case VideoResolution.H_240P:
       // quality according to Google Live Encoder: 300 - 700 Kbps
-      // Quality according to YouTube Video Info: 186 Kbps
-      return 250 * 1000
+      // Quality according to YouTube Video Info: 285 Kbps
+      return 320 * 1000
 
     case VideoResolution.H_360P:
       // quality according to Google Live Encoder: 400 - 1,000 Kbps
-      // Quality according to YouTube Video Info: 480 Kbps
-      return 500 * 1000
+      // Quality according to YouTube Video Info: 700 Kbps
+      return 780 * 1000
 
     case VideoResolution.H_480P:
       // quality according to Google Live Encoder: 500 - 2,000 Kbps
-      // Quality according to YouTube Video Info: 879 Kbps
-      return 900 * 1000
+      // Quality according to YouTube Video Info: 1300 Kbps
+      return 1500 * 1000
 
     case VideoResolution.H_720P:
       // quality according to Google Live Encoder: 1,500 - 4,000 Kbps
-      // Quality according to YouTube Video Info: 1752 Kbps
-      return 1750 * 1000
+      // Quality according to YouTube Video Info: 2680 Kbps
+      return 2800 * 1000
 
     case VideoResolution.H_1080P:
       // quality according to Google Live Encoder: 3000 - 6000 Kbps
-      // Quality according to YouTube Video Info: 3277 Kbps
-      return 3300 * 1000
+      // Quality according to YouTube Video Info: 5081 Kbps
+      return 5800 * 1000
 
     case VideoResolution.H_4K: // fallthrough
     default: