diff options
| -rw-r--r-- | .github/workflows/build-nightly-container.yml | 13 | ||||
| -rw-r--r-- | .github/workflows/build-stable-container.yml | 13 | ||||
| -rw-r--r-- | config/config.example.yml | 10 | ||||
| -rw-r--r-- | src/invidious/config.cr | 12 | ||||
| -rw-r--r-- | src/invidious/routes/api/manifest.cr | 10 | ||||
| -rw-r--r-- | src/invidious/videos.cr | 2 |
6 files changed, 23 insertions, 37 deletions
diff --git a/.github/workflows/build-nightly-container.yml b/.github/workflows/build-nightly-container.yml index bee27600..5ff3322f 100644 --- a/.github/workflows/build-nightly-container.yml +++ b/.github/workflows/build-nightly-container.yml @@ -23,19 +23,6 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Install Crystal - uses: crystal-lang/install-crystal@v1.8.2 - with: - crystal: 1.12.2 - - - name: Run lint - run: | - if ! crystal tool format --check; then - crystal tool format - git diff - exit 1 - fi - - name: Set up QEMU uses: docker/setup-qemu-action@v3 with: diff --git a/.github/workflows/build-stable-container.yml b/.github/workflows/build-stable-container.yml index d2d106b6..25571ed6 100644 --- a/.github/workflows/build-stable-container.yml +++ b/.github/workflows/build-stable-container.yml @@ -14,19 +14,6 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Install Crystal - uses: crystal-lang/install-crystal@v1.8.2 - with: - crystal: 1.12.2 - - - name: Run lint - run: | - if ! crystal tool format --check; then - crystal tool format - git diff - exit 1 - fi - - name: Set up QEMU uses: docker/setup-qemu-action@v3 with: diff --git a/config/config.example.yml b/config/config.example.yml index a3a2eeb7..bc2deda5 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -178,11 +178,11 @@ https_only: false ## ## If unset, then no HTTP proxy will be used. ## -http_proxy: - user: - password: - host: - port: +#http_proxy: +# user: +# password: +# host: +# port: ## diff --git a/src/invidious/config.cr b/src/invidious/config.cr index c4ca622f..4b3bdafc 100644 --- a/src/invidious/config.cr +++ b/src/invidious/config.cr @@ -184,6 +184,9 @@ class Config config = Config.from_yaml(config_yaml) # Update config from env vars (upcased and prefixed with "INVIDIOUS_") + # + # Also checks if any top-level config options are set to "CHANGE_ME!!" + # TODO: Support non-top-level config options such as the ones in DBConfig {% for ivar in Config.instance_vars %} {% env_id = "INVIDIOUS_#{ivar.id.upcase}" %} @@ -220,6 +223,12 @@ class Config exit(1) end end + + # Warn when any config attribute is set to "CHANGE_ME!!" + if config.{{ivar.id}} == "CHANGE_ME!!" + puts "Config: The value of '#{ {{ivar.stringify}} }' needs to be changed!!" + exit(1) + end {% end %} # HMAC_key is mandatory @@ -227,9 +236,6 @@ class Config if config.hmac_key.empty? puts "Config: 'hmac_key' is required/can't be empty" exit(1) - elsif config.hmac_key == "CHANGE_ME!!" - puts "Config: The value of 'hmac_key' needs to be changed!!" - exit(1) end # Build database_url from db.* if it's not set directly diff --git a/src/invidious/routes/api/manifest.cr b/src/invidious/routes/api/manifest.cr index d89e752c..78b4906d 100644 --- a/src/invidious/routes/api/manifest.cr +++ b/src/invidious/routes/api/manifest.cr @@ -70,17 +70,23 @@ module Invidious::Routes::API::Manifest # OTF streams aren't supported yet (See https://github.com/TeamNewPipe/NewPipe/issues/2415) next if !(fmt.has_key?("indexRange") && fmt.has_key?("initRange")) + audio_track = fmt["audioTrack"]?.try &.as_h? || {} of String => JSON::Any + lang = audio_track["id"]?.try &.as_s.split('.')[0] || "und" + is_default = audio_track.has_key?("audioIsDefault") ? audio_track["audioIsDefault"].as_bool : i == 0 + displayname = audio_track["displayName"]?.try &.as_s || "Unknown" + bitrate = fmt["bitrate"] + # Different representations of the same audio should be groupped into one AdaptationSet. # However, most players don't support auto quality switching, so we have to trick them # into providing a quality selector. # See https://github.com/iv-org/invidious/issues/3074 for more details. - xml.element("AdaptationSet", id: i, mimeType: mime_type, startWithSAP: 1, subsegmentAlignment: true, label: fmt["bitrate"].to_s + "k") do + xml.element("AdaptationSet", id: i, mimeType: mime_type, startWithSAP: 1, subsegmentAlignment: true, label: "#{displayname} [#{bitrate}k]", lang: lang) do codecs = fmt["mimeType"].as_s.split("codecs=")[1].strip('"') bandwidth = fmt["bitrate"].as_i itag = fmt["itag"].as_i url = fmt["url"].as_s - xml.element("Role", schemeIdUri: "urn:mpeg:dash:role:2011", value: i == 0 ? "main" : "alternate") + xml.element("Role", schemeIdUri: "urn:mpeg:dash:role:2011", value: is_default ? "main" : "alternate") xml.element("Representation", id: fmt["itag"], codecs: codecs, bandwidth: bandwidth) do xml.element("AudioChannelConfiguration", schemeIdUri: "urn:mpeg:dash:23003:3:audio_channel_configuration:2011", diff --git a/src/invidious/videos.cr b/src/invidious/videos.cr index ae09e736..962f87bd 100644 --- a/src/invidious/videos.cr +++ b/src/invidious/videos.cr @@ -106,7 +106,7 @@ struct Video if formats = info.dig?("streamingData", "adaptiveFormats") return formats .as_a.map(&.as_h) - .sort_by! { |f| f["width"]?.try &.as_i || 0 } + .sort_by! { |f| f["width"]?.try &.as_i || f["audioTrack"]?.try { |a| a["audioIsDefault"]?.try { |v| v.as_bool ? -1 : 0 } } || 0 } else return [] of Hash(String, JSON::Any) end |
