|
|
@@ -412,7 +412,12 @@ watch(
|
|
|
|
|
|
watch(
|
|
|
() => props.m3u8Url,
|
|
|
- (newUrl) => {
|
|
|
+ (newUrl, oldUrl) => {
|
|
|
+ // 如果URL发生变化,先停止当前播放
|
|
|
+ if (oldUrl && newUrl !== oldUrl) {
|
|
|
+ stopVideo();
|
|
|
+ }
|
|
|
+
|
|
|
if (newUrl) {
|
|
|
processVideo(newUrl);
|
|
|
}
|
|
|
@@ -438,10 +443,20 @@ const stopHlsLoading = (): void => {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+// 停止视频播放
|
|
|
+const stopVideo = (): void => {
|
|
|
+ if (videoElement.value) {
|
|
|
+ videoElement.value.pause();
|
|
|
+ videoElement.value.currentTime = 0;
|
|
|
+ }
|
|
|
+ stopHlsLoading();
|
|
|
+};
|
|
|
+
|
|
|
// 暴露方法给父组件
|
|
|
defineExpose({
|
|
|
retry,
|
|
|
stopHlsLoading,
|
|
|
+ stopVideo,
|
|
|
processedCoverUrl: computed(() => processedCoverUrl.value),
|
|
|
processedVideoUrl: computed(() => processedVideoUrl.value),
|
|
|
loading: computed(() => loading.value),
|