mirror of
https://github.com/truewhile/MeBox.git
synced 2026-10-12 00:06:37 +08:00
添加115云端解码功能
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/truewhile/MeBox/internal/config"
|
||||
"github.com/truewhile/MeBox/internal/model"
|
||||
"github.com/truewhile/MeBox/internal/service/cloud115"
|
||||
)
|
||||
|
||||
func TestCloud115QualityOptionsDefault1080AndTranscode(t *testing.T) {
|
||||
media := &model.Media{Height: 1080}
|
||||
data := &cloud115.VideoPlayData{
|
||||
DefinitionListNew: map[string]string{"3": "超清"},
|
||||
VideoURL: []cloud115.VideoURLItem{
|
||||
{Definition: 3, DefinitionN: 3, Height: 720, Width: 1280, Title: "超清"},
|
||||
},
|
||||
}
|
||||
options := Cloud115QualityOptions(media, data)
|
||||
if got := DefaultCloud115Quality(options); got != "4" {
|
||||
t.Fatalf("default quality = %q, want 4", got)
|
||||
}
|
||||
quality4, ok := findPlaybackQuality(options, "4")
|
||||
if !ok {
|
||||
t.Fatal("1080P option missing")
|
||||
}
|
||||
if quality4.Available || !quality4.RequiresTranscode {
|
||||
t.Fatalf("1080P should require transcode: %#v", quality4)
|
||||
}
|
||||
quality3, ok := findPlaybackQuality(options, "3")
|
||||
if !ok || !quality3.Available || quality3.RequiresTranscode {
|
||||
t.Fatalf("超清 should be available: %#v", quality3)
|
||||
}
|
||||
if quality4K, ok := findPlaybackQuality(options, "5"); ok {
|
||||
t.Fatalf("1080P source should not list 4K: %#v", quality4K)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCloud115QualityOptionsListsAvailableOnlyOnce(t *testing.T) {
|
||||
media := &model.Media{Height: 2160}
|
||||
data := &cloud115.VideoPlayData{
|
||||
DefinitionListNew: map[string]string{"4": "1080P", "5": "4K"},
|
||||
VideoURL: []cloud115.VideoURLItem{
|
||||
{Definition: 4, DefinitionN: 4, Height: 1080},
|
||||
{Definition: 5, DefinitionN: 5, Height: 2160},
|
||||
},
|
||||
}
|
||||
options := Cloud115QualityOptions(media, data)
|
||||
for _, id := range []string{"4", "5"} {
|
||||
quality, ok := findPlaybackQuality(options, id)
|
||||
if !ok || !quality.Available {
|
||||
t.Fatalf("quality %s should be available: %#v", id, quality)
|
||||
}
|
||||
}
|
||||
quality5, _ := findPlaybackQuality(options, "5")
|
||||
if !quality5.RequiresVIP {
|
||||
t.Fatalf("4K should be marked VIP: %#v", quality5)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLocalQualityOptionsFollowSourceHeight(t *testing.T) {
|
||||
media := &model.Media{Height: 720}
|
||||
options := LocalQualityOptions(media)
|
||||
if _, ok := findPlaybackQuality(options, "1080"); ok {
|
||||
t.Fatal("720p source should not list 1080P")
|
||||
}
|
||||
for _, id := range []string{"source", "720", "480"} {
|
||||
if _, ok := findPlaybackQuality(options, id); !ok {
|
||||
t.Fatalf("local quality %s missing", id)
|
||||
}
|
||||
}
|
||||
if got := DefaultLocalHLSQualityID(media); got != "720" {
|
||||
t.Fatalf("default local quality = %q, want 720", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLocalHLSQualityFFmpegArgs(t *testing.T) {
|
||||
cfg := &config.Config{}
|
||||
cfg.Transcoder.MaxHeight = 720
|
||||
cfg.Transcoder.SegmentSeconds = 4
|
||||
cfg.Transcoder.Realtime = false
|
||||
cfg.Transcoder.HardwareAccel = false
|
||||
|
||||
quality480, _ := LocalHLSQualityByID("480")
|
||||
args := buildFFmpegArgsForInput(cfg, transcodeInput{Source: "/x.mkv", Quality: &quality480}, "/o/x.m3u8", "/o/seg_%05d.ts")
|
||||
joined := strings.Join(args, " ")
|
||||
if !strings.Contains(joined, "scale=-2:min(480\\,ih)") {
|
||||
t.Fatalf("480P scale filter missing: %s", joined)
|
||||
}
|
||||
if !strings.Contains(joined, "-b:v 1200k") {
|
||||
t.Fatalf("480P bitrate missing: %s", joined)
|
||||
}
|
||||
|
||||
cfg.Transcoder.HardwareAccel = true
|
||||
cfg.Transcoder.Encoder = "nvenc"
|
||||
qualitySource, _ := LocalHLSQualityByID("source")
|
||||
args = buildFFmpegArgsForInput(cfg, transcodeInput{Source: "/x.mkv", Quality: &qualitySource}, "/o/x.m3u8", "/o/seg_%05d.ts")
|
||||
joined = strings.Join(args, " ")
|
||||
if strings.Contains(joined, "h264_nvenc") {
|
||||
t.Fatalf("source quality should not use hardware scale path: %s", joined)
|
||||
}
|
||||
if strings.Contains(joined, "scale=-2:min(") {
|
||||
t.Fatalf("source quality should not downscale: %s", joined)
|
||||
}
|
||||
if !strings.Contains(joined, "libx264") {
|
||||
t.Fatalf("source quality should use software x264: %s", joined)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user