Source: lib/ads/media_tailor_ad.js

  1. /*! @license
  2. * Shaka Player
  3. * Copyright 2016 Google LLC
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. goog.provide('shaka.ads.MediaTailorAd');
  7. /**
  8. * @implements {shaka.extern.IAd}
  9. * @export
  10. */
  11. shaka.ads.MediaTailorAd = class {
  12. /**
  13. * @param {mediaTailor.Ad} mediaTailorAd
  14. * @param {number} adPosition
  15. * @param {number} totalAds
  16. * @param {HTMLMediaElement} video
  17. */
  18. constructor(mediaTailorAd, adPosition, totalAds, isLinear, video) {
  19. /** @private {?mediaTailor.Ad} */
  20. this.ad_ = mediaTailorAd;
  21. /** @private {HTMLMediaElement} */
  22. this.video_ = video;
  23. /** @private {?number} */
  24. this.adPosition_ = adPosition;
  25. /** @private {?number} */
  26. this.totalAds_ = totalAds;
  27. /** @private {boolean} */
  28. this.isLinear_ = isLinear;
  29. /** @private {boolean} */
  30. this.isSkipped_ = false;
  31. }
  32. /**
  33. * @override
  34. * @export
  35. */
  36. getDuration() {
  37. return this.ad_.durationInSeconds;
  38. }
  39. /**
  40. * @override
  41. * @export
  42. */
  43. getMinSuggestedDuration() {
  44. return this.getDuration();
  45. }
  46. /**
  47. * @override
  48. * @export
  49. */
  50. getRemainingTime() {
  51. const endTime = this.ad_.startTimeInSeconds + this.ad_.durationInSeconds;
  52. return endTime - this.video_.currentTime;
  53. }
  54. /**
  55. * @override
  56. * @export
  57. */
  58. isPaused() {
  59. return this.video_.paused;
  60. }
  61. /**
  62. * @override
  63. * @export
  64. */
  65. isSkippable() {
  66. if (this.ad_.skipOffset) {
  67. return true;
  68. }
  69. return false;
  70. }
  71. /**
  72. * @override
  73. * @export
  74. */
  75. getTimeUntilSkippable() {
  76. if (!this.ad_.skipOffset) {
  77. return this.getRemainingTime();
  78. }
  79. const canSkipIn = this.getRemainingTime() - this.ad_.skipOffset;
  80. return Math.max(canSkipIn, 0);
  81. }
  82. /**
  83. * @override
  84. * @export
  85. */
  86. canSkipNow() {
  87. return this.getTimeUntilSkippable() == 0;
  88. }
  89. /**
  90. * @override
  91. * @export
  92. */
  93. skip() {
  94. this.isSkipped_ = true;
  95. this.video_.currentTime += this.getRemainingTime();
  96. }
  97. /**
  98. * @override
  99. * @export
  100. */
  101. pause() {
  102. return this.video_.pause();
  103. }
  104. /**
  105. * @override
  106. * @export
  107. */
  108. play() {
  109. return this.video_.play();
  110. }
  111. /**
  112. * @override
  113. * @export
  114. */
  115. getVolume() {
  116. return this.video_.volume;
  117. }
  118. /**
  119. * @override
  120. * @export
  121. */
  122. setVolume(volume) {
  123. this.video_.volume = volume;
  124. }
  125. /**
  126. * @override
  127. * @export
  128. */
  129. isMuted() {
  130. return this.video_.muted;
  131. }
  132. /**
  133. * @override
  134. * @export
  135. */
  136. isLinear() {
  137. return this.isLinear_;
  138. }
  139. /**
  140. * @override
  141. * @export
  142. */
  143. resize(width, height) {
  144. // Nothing
  145. }
  146. /**
  147. * @override
  148. * @export
  149. */
  150. setMuted(muted) {
  151. this.video_.muted = muted;
  152. }
  153. /**
  154. * @override
  155. * @export
  156. */
  157. getSequenceLength() {
  158. if (!this.totalAds_) {
  159. return 1;
  160. }
  161. return this.totalAds_;
  162. }
  163. /**
  164. * @override
  165. * @export
  166. */
  167. getPositionInSequence() {
  168. if (!this.adPosition_) {
  169. return 1;
  170. }
  171. return this.adPosition_;
  172. }
  173. /**
  174. * @override
  175. * @export
  176. */
  177. getTitle() {
  178. return this.ad_.adTitle;
  179. }
  180. /**
  181. * @override
  182. * @export
  183. */
  184. getDescription() {
  185. return '';
  186. }
  187. /**
  188. * @override
  189. * @export
  190. */
  191. getVastMediaBitrate() {
  192. return 0;
  193. }
  194. /**
  195. * @override
  196. * @export
  197. */
  198. getVastMediaHeight() {
  199. return 0;
  200. }
  201. /**
  202. * @override
  203. * @export
  204. */
  205. getVastMediaWidth() {
  206. return 0;
  207. }
  208. /**
  209. * @override
  210. * @export
  211. */
  212. getAdId() {
  213. return this.ad_.adId;
  214. }
  215. /**
  216. * @override
  217. * @export
  218. */
  219. getCreativeAdId() {
  220. return this.ad_.creativeId;
  221. }
  222. /**
  223. * @override
  224. * @export
  225. */
  226. getAdvertiserName() {
  227. return '';
  228. }
  229. /**
  230. * @override
  231. * @export
  232. */
  233. getMediaUrl() {
  234. return null;
  235. }
  236. /**
  237. * @override
  238. * @export
  239. */
  240. getTimeOffset() {
  241. return 0;
  242. }
  243. /**
  244. * @override
  245. * @export
  246. */
  247. getPodIndex() {
  248. return 0;
  249. }
  250. /**
  251. * @override
  252. * @export
  253. */
  254. release() {
  255. this.ad_ = null;
  256. this.video_ = null;
  257. this.adPosition_ = null;
  258. this.totalAds_ = null;
  259. }
  260. /**
  261. * @return {boolean}
  262. */
  263. isSkipped() {
  264. return this.isSkipped_;
  265. }
  266. };