初始提交:短剧库源码(含转码优化 ultrafast)
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"net/http"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestPlaybackQualityUsesActualCompatibleSourceVariants(t *testing.T) {
|
||||
model := map[string]any{"video_duration": "12.5", "video_list": []any{
|
||||
map[string]any{"main_url": "https://media.example.test/unsupported.mp4", "video_meta": map[string]any{"codec_type": "bytevc2", "definition": "2160p"}},
|
||||
map[string]any{"main_url": "https://media.example.test/high.mp4", "video_meta": map[string]any{"codec_type": "bytevc1", "definition": "1080p", "vwidth": 1080, "vheight": 1920}},
|
||||
map[string]any{"main_url": "https://media.example.test/low-hevc.mp4", "video_meta": map[string]any{"codec_type": "hevc", "definition": "720p"}},
|
||||
map[string]any{"main_url": "https://media.example.test/low-h264.mp4", "video_meta": map[string]any{"codec_type": "h264", "definition": "720p"}},
|
||||
}}
|
||||
media, err := selectHongguoAppMedia(model)
|
||||
if err != nil || media.Quality != 1080 || len(media.Variants) != 2 {
|
||||
t.Fatalf("compatible quality discovery: %+v %v", playbackQualityOptions(media), err)
|
||||
}
|
||||
d := rankingTestDownloader(t, func(*http.Request) (*http.Response, error) {
|
||||
t.Error("known quality selection performed an unnecessary upstream request")
|
||||
return nil, errors.New("no extra requests allowed")
|
||||
})
|
||||
selected, err := d.selectPlaybackQuality(context.WithValue(context.Background(), playbackQualityKey{}, 720), media)
|
||||
if err != nil || selected.Quality != 720 || !strings.HasSuffix(selected.URL, "/low-h264.mp4") || selected.Duration != 12500*time.Millisecond || len(playbackQualityOptions(selected)) != 2 {
|
||||
t.Fatal("selection lost source quality, codec preference or metadata", err)
|
||||
}
|
||||
selected, err = d.selectPlaybackQuality(context.WithValue(context.Background(), playbackQualityKey{}, 480), media)
|
||||
if err != nil || selected.Quality != 1080 || len(playbackQualityOptions(selected)) != 2 {
|
||||
t.Fatal("invented an unavailable quality", err)
|
||||
}
|
||||
if options := playbackQualityOptions(providerMedia{}); len(options) != 0 {
|
||||
t.Fatal("invented qualities for an unknown single stream")
|
||||
}
|
||||
}
|
||||
|
||||
func TestPlaybackQualitySelectsHLSVariantAndKeepsSeparateAudio(t *testing.T) {
|
||||
d := rankingTestDownloader(t, func(request *http.Request) (*http.Response, error) {
|
||||
if request.URL.String() != "https://media.example.test/video/low/index.m3u8" {
|
||||
t.Errorf("unexpected request: %s", request.URL.Path)
|
||||
return nil, errors.New("only a text variant playlist is allowed")
|
||||
}
|
||||
return rankingHTTPResponse(request, http.StatusOK, "#EXTM3U\n#EXTINF:6.25,\ngenerated.ts\n#EXT-X-ENDLIST\n"), nil
|
||||
})
|
||||
master := "#EXTM3U\n#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID=\"audio\",NAME=\"main\",DEFAULT=YES,URI=\"audio.m3u8\"\n#EXT-X-STREAM-INF:BANDWIDTH=900000,RESOLUTION=720x1280,AUDIO=\"audio\"\nlow/index.m3u8\n#EXT-X-STREAM-INF:BANDWIDTH=2000000,RESOLUTION=1080x1920,AUDIO=\"audio\"\nhigh/index.m3u8\n"
|
||||
media, err := d.selectPlaybackQuality(context.WithValue(context.Background(), playbackQualityKey{}, 720), providerMedia{URL: "https://media.example.test/video/master.m3u8", Playlist: master, Referer: "https://source.example.test/"})
|
||||
if err != nil || media.Quality != 720 || media.Duration != 6250*time.Millisecond || len(playbackQualityOptions(media)) != 2 {
|
||||
t.Fatal("HLS quality selection lost metadata", err)
|
||||
}
|
||||
if !strings.Contains(media.Playlist, "audio.m3u8") || !strings.Contains(media.Playlist, "low/index.m3u8") || strings.Contains(media.Playlist, "high/index.m3u8") {
|
||||
t.Fatal("HLS selection lost audio or kept an unselected variant")
|
||||
}
|
||||
}
|
||||
|
||||
func TestPlaybackRunRejectsStaleRequestsAndDifferentQualityPrefetch(t *testing.T) {
|
||||
app, session := prefetchFixtureApp(t)
|
||||
session.streamVersion = 5
|
||||
old := newPlaybackPrefetch(2, session.run)
|
||||
old.quality = 720
|
||||
session.prefetch = old
|
||||
if _, status, err := app.beginPlayback(viewerFixtureContext(app, context.Background()), "fixture", 2, 0, 720, 4, false); err == nil || status != http.StatusConflict || session.prefetch != old {
|
||||
t.Fatal("stale request replaced the current playback")
|
||||
}
|
||||
run, _, err := app.beginPlayback(viewerFixtureContext(app, context.Background()), "fixture", 2, 0, 1080, 6, false)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer run.stop()
|
||||
if run.cache != nil || old.ctx.Err() == nil || session.quality != 1080 {
|
||||
t.Fatal("reused a prefetch with a different quality")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user