feat(playback): 播放票据返回各清晰度地址

This commit is contained in:
Zhou Weidong committed 2026-10-23 12:34:13 +08:00
1 parent ab58641bbe
commit 5a80e6693f
4 files changed
+68

No files matched your search

@@ -5,6 +5,7 @@ import com.fruitshorts.content.dal.entity.Drama;
import com.fruitshorts.content.dal.entity.DramaEpisode;
import com.fruitshorts.content.service.DramaService;
import com.fruitshorts.content.service.EpisodeService;
import com.fruitshorts.media.dal.entity.MediaRendition;
import com.fruitshorts.media.service.PlaybackSigner;
import com.fruitshorts.media.service.ThumbnailUrlResolver;
import com.fruitshorts.media.service.TranscodeService;
@@ -147,6 +148,30 @@ class PlaybackServiceTest {
verify(signer).sign("/files/episode/15/master.m3u8");
}
@Test
void should_sign_each_ready_rendition_when_episode_has_multiple_qualities() {
DramaEpisode episode = episode(16L, 1, 0, "/files/episode/origin.mp4");
episode.setHlsUrl("/files/transcoded/16/master.m3u8");
given(episodeService.getPublished(16L)).willReturn(episode);
given(signer.sign(anyString())).willAnswer(invocation -> invocation.getArgument(0) + "?s=1");
MediaRendition ready = new MediaRendition();
ready.setQuality("720p");
ready.setPlayUrl("/files/transcoded/16/720p/index.m3u8");
ready.setStatus("ready");
MediaRendition failed = new MediaRendition();
failed.setQuality("1080p");
failed.setPlayUrl("/files/transcoded/16/1080p/index.m3u8");
failed.setStatus("failed");
given(transcodeService.listRenditions(16L)).willReturn(List.of(ready, failed));
PlayRespVO resp = playbackService.play(null, 16L, "device-9", "203.0.113.8");
assertThat(resp.getTracks()).extracting(track -> track.getQuality())
.containsExactly("AUTO", "720p");
assertThat(resp.getTracks().get(1).getPlayUrl())
.isEqualTo("/files/transcoded/16/720p/index.m3u8?s=1");
}
private DramaEpisode episode(Long id, int isFree, int unlockCoin, String videoUrl) {
DramaEpisode episode = new DramaEpisode();
episode.setId(id);