Skip to content

Commit 5fd6623

Browse files
author
dularion
committed
add example for videoFile selector & build
1 parent cc6b0c9 commit 5fd6623

File tree

7 files changed

+44
-8
lines changed

7 files changed

+44
-8
lines changed

dist/streama-video-player.css

Lines changed: 6 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/streama-video-player.js

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ $templateCache.put('streama-video-player.desktop.html','<div class="player-wrapp
2020
$templateCache.put('streama-video-player.episodeSelector.html','<div class="mobile-overlay-container mobile-episode-selector-container">\n <div class="mobile-episode-selector-season-tabs">\n <div class="mobile-episode-selector-season-tab" ng-class="{\'active\': season == options.selectedEpisodes[0].season_number}"\n ng-repeat="(season, episodes) in options.episodeList" ng-click="toggleSelectEpisodes(episodes)">\n <span>{{\'VIDEO.SEASON\' | translate}} {{season}}</span>\n </div>\n </div>\n\n <div class="mobile-episode-selector-outer">\n <div class="mobile-episode-selector-inner">\n <div class="mobile-episode-box" ng-repeat="episode in options.selectedEpisodes | orderBy:\'episode_number\'" ng-class="{\'active\': episode.id == options.currentEpisode.id}">\n <div class="image-wrapper">\n <i ng-if="episode.id != options.currentEpisode.id" class="play-button ion-ios-play" ng-click="changeEpisode(episode)"></i>\n <img ng-if="episode.still_path" ng-src="{{episode.still_path}}"/>\n <div ng-if="!episode.still_path" class="fallback-image"></div>\n </div>\n <h3>\n <span class="episode-number">{{episode.episode_number}}. </span>\n <span class="episode-name" ng-click="visible = !visible">{{episode.name}}</span>\n\n <span ng-if="episode.videoDuration" class="episode-duration">{{episode.videoDuration | videoDurationDisplay}}</span>\n </h3>\n <p class="episode-overview">{{episode.overview.length > 250 ? (episode.overview.substring(0, 250) + \'...\') : episode.overview}}</p>\n </div>\n </div>\n </div>\n\n \n</div>');
2121
$templateCache.put('streama-video-player.html','<div>\n <pre>{{playerTemplate}}</pre>\n <div ng-if="playerTemplate" ng-include="playerTemplate"></div>\n\n</div>\n\n');
2222
$templateCache.put('streama-video-player.touch.html','<div class="player-wrapper" ng-class="{\'mobile-controls-visible\': isMobileControlsVisible}">\n <pre>{{options.videoStillImage}}</pre>\n <div class="video-wrapper-inner" ng-style="getBackgroundStyle()" ng-click="toggleControls()">\n\n <div ng-if="loading">\n <i class="spinner ion-load-c" ></i>\n </div>\n\n <i ng-if="!playing && canplay" class="play-button ion-ios-play" ng-click="$event.stopPropagation();togglePlay()"></i>\n\n\n <div class="next-video-overlay" ng-if="isNextVideoShowing">\n <div class="row next-video-overlay-inner">\n <div class="col-xs-4">\n <streama-video-image video="options.nextVideo" type="poster" size="154"></streama-video-image>\n </div>\n <div class="col-xs-8">\n <h4>Up next...</h4>\n <h3>{{options.nextVideo.fullTitle}}</h3>\n <p>{{options.nextVideo.overview}}</p>\n\n <button class="play-button with-label" ng-click="next()"> <span class="play-label">play now</span> <i class="ion-ios-play"></i></button>\n </div>\n </div>\n </div>\n\n <div class="player-controls-mobile" ng-show="isMobileControlsVisible" >\n <div class="player-controls-topbar">\n <div class="player-controls-box player-control-button" ng-click="$event.stopPropagation(); closeVideo();">\n <i class="ion-close-round"></i>\n </div>\n <div class="player-controls-stretch player-controls-metaTitle">\n {{options.videoMetaTitle}}\n </div>\n\n <div class="player-controls-box player-control-button" ng-click="$event.stopPropagation(); toggleMobileOverlayBox(\'track\');">\n <i class="ion-android-textsms"></i>\n </div>\n\n <div ng-if="options.showEpisodeBrowser" class="player-controls-box player-control-button" ng-click="$event.stopPropagation(); toggleMobileOverlayBox(\'episode\')">\n <i class="ion-ios-browsers"></i>\n </div>\n <div ng-if="options.hasNextEpisode" class="player-controls-box player-control-button" ng-click="$event.stopPropagation(); next();">\n <i class="ion-ios-skipforward"></i>\n </div>\n\n </div>\n\n <div class="player-controls-bottombar" ng-if="initialPlay">\n <div class="player-controls-box player-control-button" ng-click="$event.stopPropagation();togglePlay()">\n <i class="player-play-pause play ion-play" ng-show="!playing"></i>\n <i class="player-play-pause play ion-pause" ng-show="playing"></i>\n </div>\n <div class="player-controls-box player-control-button" ng-click="$event.stopPropagation();replay(30)">\n <i class="icon-replay_30"></i>\n </div>\n <div class="player-controls-stretch">\n <rzslider ng-if="scrubber.options" rz-slider-model="scrubber.model" rz-slider-options="scrubber.options"></rzslider>\n </div>\n <div class="player-controls-box">\n <div class="time-display">\n <strong class="current-time">{{scrubber.model | streamaVideoTime}} | </strong>{{videoDuration | streamaVideoTime}}\n </div>\n </div>\n </div>\n </div>\n\n <div class="player-controls-mobile-overlay-box" ng-if="mobileOverlayBox.isVisble">\n <i class="ion-close player-controls-mobile-overlay-box-close" ng-click="toggleMobileOverlayBox()"></i>\n\n <div ng-include="\'streama-video-player.\' + mobileOverlayBox.type + \'Selector.html\'"></div>\n </div>\n\n <video ng-show="initialPlay" ng-if="isInitialized" id="video" ng-src="{{options.videoSrc | streamaTrustAs:\'resourceUrl\'}}" type="{{options.videoType}}"\n ng-click="clickVideo()" class="subtitle-size-{{options.subtitleSize}}">\n <track ng-repeat="subtitle in options.subtitles" ng-src="{{subtitle.src | streamaTrustAs:\'resourceUrl\'}}" kind="subtitles" id="subtitle-{{subtitle.id}}"\n srclang="{{subtitle.subtitleSrcLang}}" label="{{subtitle.subtitleLabel}}" src="{{subtitle.src | streamaTrustAs:\'resourceUrl\'}}">\n </video>\n\n </div>\n</div>\n\n\n');
23-
$templateCache.put('streama-video-player.trackSelector.html','<div class="mobile-overlay-container mobile-track-selector-container">\n\n <div class="row">\n <div class="col-50">\n <h2>{{\'VIDEO.SUBTITLES\' | translate}}</h2>\n <ul class="track-selector-list">\n <li class="track-selector-item" ng-class="{\'active\': !selectedSubtitleId}" ng-click="selectSubtitle()">\n {{\'VIDEO.NO_SUBTITLE\' | translate}} &nbsp;\n\n <i ng-if="!selectedSubtitleId" class="ion-checkmark"></i>\n </li>\n <li class="track-selector-item" ng-class="{\'active\': track.id == selectedSubtitleId}"\n ng-repeat="track in options.subtitles" ng-click="selectSubtitle(track)">\n {{track.subtitleLabel || track.originalFilename}}\n\n <i ng-if="track.id == selectedSubtitleId" class="ion-checkmark"></i>\n </li>\n </ul>\n </div>\n <div class="col-50">\n <h2>{{\'VIDEO.SUBTITLE_SIZE\' | translate}}</h2>\n <ul class="subtitle-size-picker">\n <li class="subtitle-size-lg" ng-class="{\'active\': options.subtitleSize == \'lg\'}" ng-click="changeSubtitleSize(\'lg\')">A</li>\n <li class="subtitle-size-md" ng-class="{\'active\': options.subtitleSize == \'md\'}" ng-click="changeSubtitleSize(\'md\')">A</li>\n <li class="subtitle-size-sm" ng-class="{\'active\': options.subtitleSize == \'sm\'}" ng-click="changeSubtitleSize(\'sm\')">A</li>\n </ul>\n </div>\n </div>\n\n\n\n</div>');}]);
23+
$templateCache.put('streama-video-player.trackSelector.html','<div class="mobile-overlay-container mobile-track-selector-container">\n\n <div class="row">\n <div class="col-50">\n <h2>{{\'VIDEO.SUBTITLES\' | translate}}</h2>\n <ul class="track-selector-list">\n <li class="track-selector-item" ng-class="{\'active\': !selectedSubtitleId}" ng-click="selectSubtitle()">\n {{\'VIDEO.NO_SUBTITLE\' | translate}} &nbsp;\n\n <i ng-if="!selectedSubtitleId" class="ion-checkmark"></i>\n </li>\n <li class="track-selector-item" ng-class="{\'active\': track.id == selectedSubtitleId}"\n ng-repeat="track in options.subtitles" ng-click="selectSubtitle(track)">\n {{track.subtitleLabel || track.originalFilename}}\n\n <i ng-if="track.id == selectedSubtitleId" class="ion-checkmark"></i>\n </li>\n </ul>\n </div>\n <div class="col-50">\n <h2>{{\'VIDEO.SUBTITLE_SIZE\' | translate}}</h2>\n <ul class="subtitle-size-picker">\n <li class="subtitle-size-lg" ng-class="{\'active\': options.subtitleSize == \'lg\'}" ng-click="changeSubtitleSize(\'lg\')">A</li>\n <li class="subtitle-size-md" ng-class="{\'active\': options.subtitleSize == \'md\'}" ng-click="changeSubtitleSize(\'md\')">A</li>\n <li class="subtitle-size-sm" ng-class="{\'active\': options.subtitleSize == \'sm\'}" ng-click="changeSubtitleSize(\'sm\')">A</li>\n </ul>\n </div>\n <div class="col-50">\n <h2>{{\'VIDEO.VIDEO_FILES\' | translate}}</h2>\n <ul class="track-selector-list">\n <li class="track-selector-item" ng-class="{\'active\': isVideoFileSelected(track)}"\n ng-repeat="track in options.videoFiles" ng-click="selectVideoFile(track)">\n {{track.label || track.originalFilename}}\n\n\n <i ng-if="isVideoFileSelected(track)" class="ion-checkmark"></i>\n </li>\n </ul>\n </div>\n </div>\n\n\n\n</div>\n');}]);
2424
//= wrapped
2525

2626
angular.module('streama.videoPlayer').directive('streamaVideoImage', function () {
@@ -73,6 +73,8 @@ angular.module('streama.videoPlayer').directive('streamaVideoPlayer', [
7373
$scope.getBackgroundStyle = getBackgroundStyle;
7474
$scope.changeEpisode = changeEpisode;
7575
$scope.selectSubtitle = selectSubtitle;
76+
$scope.selectVideoFile = selectVideoFile;
77+
$scope.isVideoFileSelected = isVideoFileSelected;
7678
$scope.showControls = showControls;
7779
$scope.toggleSelectEpisodes = toggleSelectEpisodes;
7880
$scope.createNewPlayerSession = createNewPlayerSession;
@@ -175,6 +177,20 @@ angular.module('streama.videoPlayer').directive('streamaVideoPlayer', [
175177
localStorageService.set('selectedSubtitleLanguage', _.get(subtitle, 'subtitleSrcLang'));
176178
}
177179

180+
function selectVideoFile(videoFile){
181+
$scope.initialPlay = false;
182+
$scope.options.customStartingTime = video.currentTime;
183+
$scope.options.selectedVideoFile = videoFile;
184+
$scope.options.videoSrc = (videoFile.src || videoFile.externalLink);
185+
$scope.options.originalFilename = videoFile.originalFilename;
186+
$scope.options.videoType = videoFile.contentType;
187+
localStorageService.set('selectedVideoFile', videoFile.label);
188+
}
189+
190+
function isVideoFileSelected(videoFile){
191+
return _.isEqualBy($scope.options.selectedVideoFile, videoFile, 'id');
192+
}
193+
178194
function getCurrentSubtitleTrack() {
179195
return _.find($scope.options.subtitles, {id: $scope.options.currentSubtitle});
180196
}
@@ -418,7 +434,7 @@ angular.module('streama.videoPlayer').directive('streamaVideoPlayer', [
418434
}
419435

420436

421-
console.log('TIME UPDATE at time: ' + video.currentTime);
437+
// console.log('TIME UPDATE at time: ' + video.currentTime);
422438
}
423439

424440
function determineNextVideoShowing() {
@@ -653,6 +669,7 @@ angular.module('streama.videoPlayer').factory('streamaVideoPlayerService', [
653669
videoType: '',
654670
videoTrack: '',
655671
subtitles: [],
672+
videoFiles: [],
656673
videoOverlayEnabled: true,
657674
showEpisodeBrowser: false,
658675
hasNextEpisode: false,

dist/streama-video-player.min.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/streama-video-player.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/index.html

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<script src="../bower_components/lodash/lodash.js"></script>
1616
<script src="../bower_components/streama-i18n/dist/streama-i18n.min.js"></script>
1717
<script src="../bower_components/angular-sanitize/angular-sanitize.js"></script>
18+
<script src="lodashMixins.js"></script>
1819
<script src="../dist/streama-video-player.js"></script>
1920
<link rel="stylesheet" href="../bower_components/bootstrap/dist/css/bootstrap.css">
2021
<link rel="stylesheet" href="../bower_components/Ionicons/css/ionicons.css">
@@ -36,9 +37,15 @@
3637

3738
<script>
3839
angular.module('myModule', ['streama.videoPlayer']).run(function ($rootScope) {
40+
var videoFiles = [
41+
{"id": 1561, "src": "https://www.html5rocks.com/en/tutorials/video/basics/devstories.webm", "label": "Deutsch", isDefault: true, "contentType": "audio/webm"},
42+
{"id": 1562, "src": "https://www.w3schools.com/html/mov_bbb.mp4", "label": "English", "contentType": "audio/webm"}
43+
];
44+
3945
$rootScope.videoOptions = {
4046
videoSrc: 'https://www.html5rocks.com/en/tutorials/video/basics/devstories.webm',
4147
isExternalLink: true,
48+
selectedVideoFile: videoFiles[0],
4249
episodeList: {
4350
1: [
4451
{id: 1, name: 'Pilot', season_number: 1, episode_number:1, episodeString: 's01e01', still_path: 'https://image.tmdb.org/t/p/original/ydlY3iPfeOAvu8gVqrxPoMvzNCn.jpg', overview: 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.', videoDuration: 1320},
@@ -59,6 +66,8 @@
5966
{"id": 1562, "src": "/example/sub-en.vtt", "subtitleLabel": "English", "subtitleSrcLang": "en", "contentType": "application/x-subrip"}
6067
],
6168

69+
videoFiles: videoFiles,
70+
6271
"nextVideo": {
6372
"id": 522,
6473
"overview": "The second 7 acts moving on to the semifinal round are revealed.",
@@ -75,4 +84,4 @@
7584

7685
</script>
7786
</body>
78-
</html>
87+
</html>

src/css/streama-video-player.css

Lines changed: 6 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/css/streama-video-player.css.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)