diff --git a/src/main/java/org/olat/core/dispatcher/mapper/MapperDispatcher.java b/src/main/java/org/olat/core/dispatcher/mapper/MapperDispatcher.java --- a/src/main/java/org/olat/core/dispatcher/mapper/MapperDispatcher.java +++ b/src/main/java/org/olat/core/dispatcher/mapper/MapperDispatcher.java @@ -89,7 +89,18 @@ } else { smappath = subInfo.substring(0, slashPos); } - + + // Remove jsession ID if available for media plugin compatibility (e.g. iOS 7 / iOS 10 video playback) + int jsessionPos = subInfo.indexOf(";jsessionid="); + if (jsessionPos != -1) { + int paramPos = subInfo.indexOf("?"); + if (paramPos == -1) { + subInfo = subInfo.substring(0, jsessionPos); + } else { + subInfo = subInfo.substring(0, jsessionPos) + subInfo.substring(paramPos); + } + } + //legacy??? DBFactory.getInstance().commitAndCloseSession(); diff --git a/src/main/java/org/olat/modules/video/manager/VideoMediaMapper.java b/src/main/java/org/olat/modules/video/manager/VideoMediaMapper.java --- a/src/main/java/org/olat/modules/video/manager/VideoMediaMapper.java +++ b/src/main/java/org/olat/modules/video/manager/VideoMediaMapper.java @@ -42,8 +42,9 @@ VFSItem mediaFile = mediaBase.resolve(relPath); if (mediaFile instanceof VFSLeaf && !relPath.endsWith("xml")){ VFSMediaResource res = new VFSMediaResource((VFSLeaf)mediaFile); - if (relPath.toLowerCase().endsWith("srt")) { - // SRT caption files are supposed to be UTF-8, see + String lowerPath = relPath.toLowerCase(); + if (lowerPath.endsWith("srt") || lowerPath.endsWith("vtt")) { + // SRT / VTT caption files are supposed to be UTF-8, see // https://en.wikipedia.org/wiki/SubRip#Text_encoding res.setEncoding("utf-8"); } diff --git a/src/main/java/org/olat/modules/video/ui/VideoDisplayController.java b/src/main/java/org/olat/modules/video/ui/VideoDisplayController.java --- a/src/main/java/org/olat/modules/video/ui/VideoDisplayController.java +++ b/src/main/java/org/olat/modules/video/ui/VideoDisplayController.java @@ -137,6 +137,9 @@ listenTo(commentsAndRatingCtr); mainVC.put("commentsAndRating", commentsAndRatingCtr.getInitialComponent()); } + + // Add session info for iOS 10 missing-session workaround + mainVC.contextPut("jsession", ";jsessionid=" + ureq.getHttpReq().getSession().getId()); // Finally load the video, transcoded versions and tracks loadVideo(video); diff --git a/src/main/java/org/olat/modules/video/ui/_content/video_run.html b/src/main/java/org/olat/modules/video/ui/_content/video_run.html --- a/src/main/java/org/olat/modules/video/ui/_content/video_run.html +++ b/src/main/java/org/olat/modules/video/ui/_content/video_run.html @@ -1,18 +1,18 @@
-