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. }
  30. /**
  31. * @override
  32. * @export
  33. */
  34. getDuration() {
  35. return this.ad_.durationInSeconds;
  36. }
  37. /**
  38. * @override
  39. * @export
  40. */
  41. getMinSuggestedDuration() {
  42. return this.getDuration();
  43. }
  44. /**
  45. * @override
  46. * @export
  47. */
  48. getRemainingTime() {
  49. const endTime = this.ad_.startTimeInSeconds + this.ad_.durationInSeconds;
  50. return endTime - this.video_.currentTime;
  51. }
  52. /**
  53. * @override
  54. * @export
  55. */
  56. isPaused() {
  57. return this.video_.paused;
  58. }
  59. /**
  60. * @override
  61. * @export
  62. */
  63. isSkippable() {
  64. if (this.ad_.skipOffset) {
  65. return true;
  66. }
  67. return false;
  68. }
  69. /**
  70. * @override
  71. * @export
  72. */
  73. getTimeUntilSkippable() {
  74. if (!this.ad_.skipOffset) {
  75. return this.getRemainingTime();
  76. }
  77. const canSkipIn = this.getRemainingTime() - this.ad_.skipOffset;
  78. return Math.max(canSkipIn, 0);
  79. }
  80. /**
  81. * @override
  82. * @export
  83. */
  84. canSkipNow() {
  85. return this.getTimeUntilSkippable() == 0;
  86. }
  87. /**
  88. * @override
  89. * @export
  90. */
  91. skip() {
  92. this.video_.currentTime += this.getRemainingTime();
  93. }
  94. /**
  95. * @override
  96. * @export
  97. */
  98. pause() {
  99. return this.video_.pause();
  100. }
  101. /**
  102. * @override
  103. * @export
  104. */
  105. play() {
  106. return this.video_.play();
  107. }
  108. /**
  109. * @override
  110. * @export
  111. */
  112. getVolume() {
  113. return this.video_.volume;
  114. }
  115. /**
  116. * @override
  117. * @export
  118. */
  119. setVolume(volume) {
  120. this.video_.volume = volume;
  121. }
  122. /**
  123. * @override
  124. * @export
  125. */
  126. isMuted() {
  127. return this.video_.muted;
  128. }
  129. /**
  130. * @override
  131. * @export
  132. */
  133. isLinear() {
  134. return this.isLinear_;
  135. }
  136. /**
  137. * @override
  138. * @export
  139. */
  140. resize(width, height) {
  141. // Nothing
  142. }
  143. /**
  144. * @override
  145. * @export
  146. */
  147. setMuted(muted) {
  148. this.video_.muted = muted;
  149. }
  150. /**
  151. * @override
  152. * @export
  153. */
  154. getSequenceLength() {
  155. if (!this.totalAds_) {
  156. return 1;
  157. }
  158. return this.totalAds_;
  159. }
  160. /**
  161. * @override
  162. * @export
  163. */
  164. getPositionInSequence() {
  165. if (!this.adPosition_) {
  166. return 1;
  167. }
  168. return this.adPosition_;
  169. }
  170. /**
  171. * @override
  172. * @export
  173. */
  174. getTitle() {
  175. return this.ad_.adTitle;
  176. }
  177. /**
  178. * @override
  179. * @export
  180. */
  181. getDescription() {
  182. return '';
  183. }
  184. /**
  185. * @override
  186. * @export
  187. */
  188. getVastMediaBitrate() {
  189. return 0;
  190. }
  191. /**
  192. * @override
  193. * @export
  194. */
  195. getVastMediaHeight() {
  196. return 0;
  197. }
  198. /**
  199. * @override
  200. * @export
  201. */
  202. getVastMediaWidth() {
  203. return 0;
  204. }
  205. /**
  206. * @override
  207. * @export
  208. */
  209. getAdId() {
  210. return this.ad_.adId;
  211. }
  212. /**
  213. * @override
  214. * @export
  215. */
  216. getCreativeAdId() {
  217. return this.ad_.creativeId;
  218. }
  219. /**
  220. * @override
  221. * @export
  222. */
  223. getAdvertiserName() {
  224. return '';
  225. }
  226. /**
  227. * @override
  228. * @export
  229. */
  230. getMediaUrl() {
  231. return null;
  232. }
  233. /**
  234. * @override
  235. * @export
  236. */
  237. getTimeOffset() {
  238. return 0;
  239. }
  240. /**
  241. * @override
  242. * @export
  243. */
  244. getPodIndex() {
  245. return 0;
  246. }
  247. /**
  248. * @override
  249. * @export
  250. */
  251. release() {
  252. this.ad_ = null;
  253. this.video_ = null;
  254. this.adPosition_ = null;
  255. this.totalAds_ = null;
  256. }
  257. };