feat(playback): 播放票据返回各清晰度地址
This commit is contained in:
1 parent
ab58641bbe
commit
5a80e6693f
4 files changed
+68
No files matched your search
+25
@@ -13,6 +13,7 @@ import com.fruitshorts.media.service.TranscodeService;
|
||||
import com.fruitshorts.playback.dal.entity.PlaybackTicket;
|
||||
import com.fruitshorts.playback.dal.mapper.PlaybackTicketMapper;
|
||||
import com.fruitshorts.playback.vo.PlayRespVO;
|
||||
import com.fruitshorts.playback.vo.PlayTrackVO;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -87,6 +88,7 @@ public class PlaybackService {
|
||||
vo.setAccessible(true);
|
||||
vo.setAccessType(entitled && !free ? ACCESS_ENTITLED : ACCESS_FREE);
|
||||
vo.setPlayUrl(signedUrl);
|
||||
vo.setTracks(tracksOf(episode.getId(), signedUrl));
|
||||
|
||||
if (userId != null) {
|
||||
recordTicket(userId, drama.getId(), episode.getId(), signedUrl, deviceId, clientIp);
|
||||
@@ -115,6 +117,29 @@ public class PlaybackService {
|
||||
return qualities;
|
||||
}
|
||||
|
||||
/** AUTO 用主列表,其余档位用各自的 index.m3u8,地址都签名。 */
|
||||
private List<PlayTrackVO> tracksOf(Long episodeId, String signedAuto) {
|
||||
List<PlayTrackVO> tracks = new ArrayList<>();
|
||||
tracks.add(track("AUTO", signedAuto));
|
||||
for (MediaRendition rendition : transcodeService.listRenditions(episodeId)) {
|
||||
if (!StringUtils.hasText(rendition.getPlayUrl())) {
|
||||
continue;
|
||||
}
|
||||
if (!"ready".equalsIgnoreCase(rendition.getStatus())) {
|
||||
continue;
|
||||
}
|
||||
tracks.add(track(rendition.getQuality(), signer.sign(rendition.getPlayUrl())));
|
||||
}
|
||||
return tracks;
|
||||
}
|
||||
|
||||
private PlayTrackVO track(String quality, String playUrl) {
|
||||
PlayTrackVO track = new PlayTrackVO();
|
||||
track.setQuality(quality);
|
||||
track.setPlayUrl(playUrl);
|
||||
return track;
|
||||
}
|
||||
|
||||
private void recordTicket(Long userId, Long dramaId, Long episodeId, String playUrl,
|
||||
String deviceId, String clientIp) {
|
||||
PlaybackTicket ticket = new PlaybackTicket();
|
||||
|
||||
@@ -23,6 +23,8 @@ public class PlayRespVO {
|
||||
private String playUrl;
|
||||
/** 可用的清晰度档位 */
|
||||
private List<String> qualities;
|
||||
/** 各档签名地址。AUTO 是主播放列表,其余是单档 HLS。 */
|
||||
private List<PlayTrackVO> tracks;
|
||||
/** 雪碧图 WebVTT 时间轴地址;没有产物时为 null */
|
||||
private String thumbnailsUrl;
|
||||
/** 需要多少金币解锁 */
|
||||
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
// Author: fruit.com.cn
|
||||
|
||||
package com.fruitshorts.playback.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/** 一档可切换的清晰度及其签名播放地址。 */
|
||||
@Data
|
||||
public class PlayTrackVO {
|
||||
|
||||
/** AUTO 或 360p/480p/720p/1080p。 */
|
||||
private String quality;
|
||||
|
||||
/** 签名后的播放地址,客户端原样使用。 */
|
||||
private String playUrl;
|
||||
}
|
||||
Reference in new issue
Block a user