detail.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769
  1. // pages/video/detail.js
  2. import {
  3. getVideoDetail,
  4. getRealVideoUrl,
  5. postWithCommonParams,
  6. getRelatedVideos,
  7. getUuid,
  8. } from "../../api/api";
  9. import { rnd, SendEvent } from "../../utils/util";
  10. import { apple } from "../../config/config";
  11. const app = getApp();
  12. let interstitialAd = null;
  13. let insertAdInterval = null;
  14. Page({
  15. data: {
  16. videoId: "",
  17. videoInfo: null,
  18. videoDetail: null,
  19. episodeList: [],
  20. currentEpisodeIndex: 0,
  21. currentEpisode: null, // 当前播放的剧集
  22. isPlaying: false,
  23. isLoading: true,
  24. title: "",
  25. scrollHeight: 0,
  26. windowHeight: 0,
  27. realVideoUrl: "", // 存储真实的视频播放地址
  28. videoStatus: 0, // 0 未播放 1 播放中 2 暂停
  29. duration: 0, // 视频总时长
  30. currentTime: 0, // 当前播放时间
  31. relatedVideos: [],
  32. tagId: 0,
  33. share_count: 1,
  34. scene: 0, // 场景值
  35. },
  36. onLoad: function (options) {
  37. const videoId = parseInt(options.id);
  38. const videoTitle = options.title ? decodeURIComponent(options.title) : "";
  39. const tagId = parseInt(options.tag_id);
  40. this.setData({
  41. scene: wx.getStorageSync("scene") || 1001,
  42. });
  43. SendEvent("show_video", {
  44. video_id: videoId,
  45. tag_id: tagId,
  46. scene: this.data.scene,
  47. uuid: app.globalData.uuid,
  48. });
  49. console.log("加载视频详情页,ID:", videoId, "标题:", videoTitle);
  50. // 获取系统信息
  51. this.getSystemInfo();
  52. // 如果有传递标题,则直接使用
  53. if (videoTitle) {
  54. this.setData({
  55. title: videoTitle,
  56. videoId: videoId,
  57. isLoading: true,
  58. tagId: tagId,
  59. });
  60. } else {
  61. this.setData({
  62. videoId: videoId,
  63. isLoading: true,
  64. tagId: tagId,
  65. });
  66. }
  67. this.interstitalLoad();
  68. this.rewardVideoLoad();
  69. this.loadVideoDetail(videoId);
  70. app.globalData.isEnterVideoDetail = true;
  71. },
  72. onShow() {
  73. const pages = getCurrentPages();
  74. const currentPage = pages[pages.length - 1];
  75. const options = currentPage.options;
  76. console.log("scene", this.data.scene);
  77. if (+options.share_count === 1 && this.data.share_count === 1) {
  78. this.setData({
  79. share_count: 2,
  80. });
  81. if (this.data.scene === 1007 || this.data.scene === 1008) {
  82. console.log("准备跳转novel");
  83. this.goToBookDetail();
  84. } else {
  85. console.log("没有跳转novel");
  86. }
  87. } else if (+options.share_count === 1 && this.data.share_count === 2) {
  88. this.setData({
  89. share_count: 3,
  90. });
  91. }
  92. },
  93. /**
  94. * 获取uuid
  95. */
  96. getUUID() {
  97. return new Promise((resolve, reject) => {
  98. wx.login({
  99. success: (res) => {
  100. let body = {
  101. code: res.code,
  102. source_type: 1,
  103. source_id: "",
  104. };
  105. getUuid(body)
  106. .then(async (res) => {
  107. resolve(res.uuid);
  108. })
  109. .catch((err) => {
  110. reject(err);
  111. });
  112. },
  113. });
  114. });
  115. },
  116. // 获取系统信息
  117. getSystemInfo() {
  118. const systemInfo = wx.getSystemInfoSync();
  119. this.setData({
  120. windowHeight: systemInfo.windowHeight,
  121. });
  122. },
  123. // 加载视频详情
  124. async loadVideoDetail(id) {
  125. try {
  126. wx.showLoading({
  127. title: "加载中...",
  128. mask: true,
  129. });
  130. //getUuid
  131. if (!getApp().globalData.uuid) {
  132. await this.getUUID().then((uuid) => {
  133. getApp().globalData.uuid = uuid;
  134. });
  135. }
  136. // 构建请求参数
  137. const params = {
  138. id,
  139. tag_id: this.data.tagId,
  140. uuid: getApp().globalData.uuid,
  141. };
  142. const videoDetail = await getVideoDetail(params);
  143. console.log("视频详情数据:", videoDetail);
  144. if (videoDetail) {
  145. // 处理视频信息
  146. const formattedVideoInfo = {
  147. id: videoDetail.id,
  148. title: videoDetail.title || this.data.title,
  149. cover: videoDetail.cover_image,
  150. playCount: videoDetail.views || "0",
  151. playUV: videoDetail.play_uv || "0",
  152. videoUrl: "", // 暂时为空,等待获取真实播放地址
  153. description: videoDetail.description || "暂无简介",
  154. tags: videoDetail.tag_ids || [],
  155. likeCount: videoDetail.like || "0",
  156. shareCount: videoDetail.share || "0",
  157. isCollect: videoDetail.is_collect === 1,
  158. video_type: videoDetail.video_type, // 保存原始视频类型
  159. tag_ids: videoDetail.tag_ids, // 保存标签ID列表
  160. };
  161. this.setData({
  162. videoInfo: formattedVideoInfo,
  163. title: formattedVideoInfo.title,
  164. isLoading: false,
  165. });
  166. // 获取真实播放地址
  167. this.getVideoPlayUrl(videoDetail);
  168. this.interstitalEnterPageShow();
  169. // 加载相关视频
  170. this.loadRelatedVideos(videoDetail.tag_ids);
  171. } else {
  172. this.setData({
  173. isLoading: false,
  174. });
  175. wx.showToast({
  176. title: "获取视频详情失败",
  177. icon: "none",
  178. });
  179. }
  180. } catch (error) {
  181. console.error("获取视频详情失败:", error);
  182. this.setData({
  183. isLoading: false,
  184. });
  185. wx.showToast({
  186. title: "获取视频详情失败",
  187. icon: "none",
  188. });
  189. } finally {
  190. wx.hideLoading();
  191. }
  192. },
  193. // 获取视频播放地址
  194. async getVideoPlayUrl(videoDetail) {
  195. console.log(`videoDetail`, videoDetail);
  196. try {
  197. // 根据视频类型进行处理
  198. switch (videoDetail.video_type) {
  199. case 3: // OAS视频
  200. // 获取真实播放地址
  201. const tagId =
  202. videoDetail.tag_ids && videoDetail.tag_ids.length > 0
  203. ? videoDetail.tag_ids[0]
  204. : 2072;
  205. let parseRes = await getRealVideoUrl(videoDetail.id, this.data.tagId); // 此处需要使用传入的tag_id,否则视频有多个tag_id时,会无法获取到真实播放地址
  206. console.log("parseRes", parseRes);
  207. // 默认视频为免费视频
  208. videoDetail.lock = false;
  209. // 标记暂停插屏是否显示过
  210. videoDetail.pauseInsertAd = false;
  211. // 默认视频不显示插屏
  212. videoDetail.insertAd = false;
  213. videoDetail.adType = "video";
  214. videoDetail.likeNum = rnd(101, 209) / 10;
  215. videoDetail.like = false;
  216. videoDetail.shareNum = rnd(51, 99) / 10;
  217. if (videoDetail.video_type !== 4) {
  218. videoDetail.playUrl = parseRes.url_info[0].url;
  219. }
  220. if (videoDetail.is_top === 1) {
  221. videoDetail.top = true;
  222. }
  223. this.setData({
  224. isLoading: false,
  225. videoDetail: videoDetail,
  226. });
  227. break;
  228. case 4: // 微信视频
  229. // 直接使用video_vid
  230. this.setData({
  231. "videoInfo.videoUrl": videoDetail.video_vid,
  232. });
  233. break;
  234. default:
  235. // 默认使用url字段
  236. if (videoDetail.url) {
  237. this.setData({
  238. "videoInfo.videoUrl": videoDetail.url,
  239. });
  240. } else {
  241. throw new Error("不支持的视频类型");
  242. }
  243. }
  244. } catch (error) {
  245. console.error("获取视频播放地址失败:", error);
  246. wx.showToast({
  247. title: "无法获取视频播放地址",
  248. icon: "none",
  249. });
  250. }
  251. },
  252. // 切换剧集
  253. switchEpisode(e) {
  254. const index = e.currentTarget.dataset.index;
  255. if (index === this.data.currentEpisodeIndex) return;
  256. const episode = this.data.episodeList[index];
  257. if (!episode) return;
  258. this.setData({
  259. currentEpisodeIndex: index,
  260. currentEpisode: episode,
  261. isPlaying: true,
  262. });
  263. // 获取视频实例并播放
  264. const videoContext = wx.createVideoContext("myVideo");
  265. videoContext.play();
  266. },
  267. // 视频播放事件
  268. onVideoPlay() {
  269. this.setData({
  270. isPlaying: true,
  271. videoStatus: 1,
  272. });
  273. // 可以添加播放埋点
  274. console.log("视频开始播放:", this.data.videoInfo.id);
  275. },
  276. // 视频暂停事件
  277. onVideoPause() {
  278. this.setData({
  279. isPlaying: false,
  280. videoStatus: 2,
  281. });
  282. console.log("视频暂停:", this.data.videoInfo.id);
  283. },
  284. // 视频播放结束事件
  285. onVideoEnd() {
  286. this.setData({
  287. isPlaying: false,
  288. videoStatus: 0,
  289. });
  290. // 可以添加结束埋点
  291. console.log("视频播放结束:", this.data.videoInfo.id);
  292. },
  293. // 视频时间更新事件
  294. onVideoUpdate(e) {
  295. const { currentTime, duration } = e.detail;
  296. this.setData({
  297. currentTime,
  298. duration,
  299. });
  300. },
  301. // 视频元数据加载完成
  302. onVideoLoaded(e) {
  303. console.log("视频元数据加载完成", e.detail);
  304. },
  305. // 视频播放
  306. makeVideoPlay() {
  307. if (!this.data.videoInfo.lock && this.data.videoStatus == 2) {
  308. let video = this.getCurrentVideoContext();
  309. video.play();
  310. }
  311. },
  312. // 视频暂停
  313. makeVideoPause() {
  314. if (this.data.videoStatus == 1) {
  315. let video = this.getCurrentVideoContext();
  316. video.pause();
  317. }
  318. },
  319. // 获取当前视频播放器实例
  320. getCurrentVideoContext() {
  321. return wx.createVideoContext(`myVideo`, this);
  322. },
  323. // 点击视频控制区
  324. onClickVideoControls() {
  325. if (this.data.videoStatus === 1) {
  326. // 当前正在播放,暂停视频
  327. const videoContext = wx.createVideoContext("myVideo");
  328. videoContext.pause();
  329. this.insertAdType = 1;
  330. this.interstitalPlayFn();
  331. } else {
  332. // 当前已暂停,开始播放
  333. const videoContext = wx.createVideoContext("myVideo");
  334. videoContext.play();
  335. }
  336. },
  337. // 点击相关推荐视频
  338. onRelatedVideoTap(e) {
  339. const _this = this;
  340. const videoId = e.currentTarget.dataset.id;
  341. const video = this.data.relatedVideos.find((item) => item.id === videoId);
  342. if (!video) {
  343. wx.showToast({
  344. title: "视频信息获取失败",
  345. icon: "none",
  346. });
  347. return;
  348. }
  349. const tag_id = video.tag_ids[0];
  350. // 显示加载中提示
  351. wx.showLoading({
  352. title: "加载中...",
  353. mask: true,
  354. });
  355. // 将标题进行URI编码处理
  356. const encodedTitle = encodeURIComponent(video.title || "");
  357. this.unlockUrl = `/pages/video/detail?id=${videoId}&title=${encodedTitle}&tag_id=${tag_id}`;
  358. this.unlockVideo = video;
  359. SendEvent("click_recommend_video", {
  360. video_id: videoId,
  361. tag_id: tag_id,
  362. uuid: app.globalData.uuid,
  363. });
  364. if (!video.lock) {
  365. // 跳转到视频详情页
  366. wx.navigateTo({
  367. url: this.unlockUrl,
  368. success: () => {
  369. wx.hideLoading();
  370. },
  371. fail: (err) => {
  372. console.error("跳转失败:", err);
  373. wx.hideLoading();
  374. wx.showToast({
  375. title: "跳转失败",
  376. icon: "none",
  377. });
  378. },
  379. });
  380. } else {
  381. wx.showModal({
  382. title: "提示",
  383. content: "当前视频需要看完完整广告后才能解锁",
  384. cancelText: "关闭",
  385. confirmText: "解锁视频",
  386. confirmColor: "#02BB00",
  387. success(res) {
  388. if (res.confirm) {
  389. _this.rewardType = 2;
  390. _this.rewardVideoPlayFn();
  391. } else if (res.cancel) {
  392. console.log("用户点击取消");
  393. wx.hideLoading();
  394. }
  395. },
  396. });
  397. }
  398. },
  399. // 跳转到书籍详情
  400. goToBookDetail() {
  401. getApp().globalData.isShowDialog = true;
  402. goToBookDetail({
  403. bookId: 10745,
  404. wxBookId: "A1L2D5CPFHZW6Gzr9VdypmijDJ",
  405. chapterId: null,
  406. });
  407. },
  408. // 返回上一页
  409. goBack() {
  410. wx.navigateBack({
  411. delta: 1,
  412. });
  413. // wx.redirectTo({
  414. // url: '/pages/video/video',
  415. // });
  416. console.log("返回上一页");
  417. SendEvent("click_return_list", {
  418. video_id: this.data.videoId,
  419. tag_id: this.data.tagId,
  420. uuid: app.globalData.uuid,
  421. });
  422. },
  423. // 分享按钮点击事件
  424. onShareTap(e) {
  425. // 阻止事件冒泡
  426. e.stopPropagation();
  427. },
  428. // 分享给朋友
  429. onShareAppMessage(e) {
  430. const jump = wx.getStorageSync("jump"); // 是否跳转阅读器
  431. let url = "";
  432. // 如果是从推荐视频分享
  433. if (e.target && e.target.dataset.video) {
  434. const video = e.target.dataset.video;
  435. url = `/pages/video/video?shared_video_id=${video.id}&title=${encodeURIComponent(video.title)}&tag_id=${video.tag_ids[0]}&share_count=1&type=share`;
  436. if (jump === 1) {
  437. url += "&jump=1";
  438. }
  439. SendEvent("click_share", {
  440. video_id: video.id,
  441. tag_id: video.tag_ids[0],
  442. });
  443. return {
  444. title: video.title,
  445. path: url,
  446. imageUrl: video.cover_image,
  447. success: function (res) {
  448. wx.showToast({
  449. title: "分享成功",
  450. icon: "success",
  451. duration: 1500,
  452. });
  453. },
  454. fail: function (res) {
  455. wx.showToast({
  456. title: "分享失败",
  457. icon: "none",
  458. duration: 1500,
  459. });
  460. },
  461. };
  462. }
  463. // 默认分享当前视频
  464. const videoInfo = this.data.videoInfo;
  465. url = `/pages/video/video?shared_video_id=${videoInfo.id}&title=${encodeURIComponent(videoInfo.title)}&tag_id=${videoInfo.tag_ids[0]}&share_count=1&type=share`;
  466. if (jump === 1) {
  467. url += "&jump=1";
  468. }
  469. SendEvent("click_share", {
  470. video_id: videoInfo.id,
  471. tag_id: videoInfo.tag_ids[0],
  472. });
  473. return {
  474. title: videoInfo.title,
  475. path: url,
  476. imageUrl: videoInfo.cover,
  477. success: function (res) {
  478. wx.showToast({
  479. title: "分享成功",
  480. icon: "success",
  481. duration: 1500,
  482. });
  483. },
  484. fail: function (res) {
  485. wx.showToast({
  486. title: "分享失败",
  487. icon: "none",
  488. duration: 1500,
  489. });
  490. },
  491. };
  492. },
  493. // 分享到朋友圈
  494. onShareTimeline() {
  495. const videoInfo = this.data.videoInfo;
  496. const jump = wx.getStorageSync("jump"); // 是否跳转阅读器
  497. let params = `shared_video_id=${videoInfo.id}&title=${encodeURIComponent(videoInfo.title)}&tag_id=${videoInfo.tag_ids[0]}&share_count=1&type=share`;
  498. if (jump === 1) {
  499. params += "&jump=1";
  500. }
  501. SendEvent("click_share_moment", {
  502. video_id: videoInfo.id,
  503. tag_id: videoInfo.tag_ids[0],
  504. });
  505. return {
  506. title: videoInfo.title,
  507. query: params,
  508. imageUrl: videoInfo.cover,
  509. };
  510. },
  511. // 收藏视频
  512. toggleCollect() {
  513. const isCollect = !this.data.videoInfo.isCollect;
  514. this.setData({
  515. "videoInfo.isCollect": isCollect,
  516. });
  517. wx.showToast({
  518. title: isCollect ? "收藏成功" : "已取消收藏",
  519. icon: "success",
  520. });
  521. },
  522. // 点赞视频
  523. likeVideo() {
  524. const currentLikes = parseInt(this.data.videoInfo.likeCount) || 0;
  525. this.setData({
  526. "videoInfo.likeCount": (currentLikes + 1).toString(),
  527. });
  528. wx.showToast({
  529. title: "点赞成功",
  530. icon: "success",
  531. });
  532. },
  533. // 滚动事件
  534. onScroll(e) {
  535. this.setData({
  536. scrollHeight: e.detail.scrollTop,
  537. });
  538. },
  539. // 加载相关视频
  540. async loadRelatedVideos(tagIds) {
  541. try {
  542. // 使用第一个标签ID获取相关视频
  543. const tagId = tagIds && tagIds.length > 0 ? tagIds[0] : 2072;
  544. console.log("原始ID:", apple.ghid);
  545. const relatedVideos = await getRelatedVideos({
  546. tag_id: tagId,
  547. gh_id: apple.ghid,
  548. });
  549. // 需要播放激励视频的索引
  550. let rewardIndexList = [];
  551. console.log("详情激励配置", app.globalData.ads_config);
  552. if (app.globalData.ads_config.detailListLockIndex) {
  553. rewardIndexList = app.globalData.ads_config.detailListLockIndex
  554. .split(" ")
  555. .map((i) => {
  556. return i - 1;
  557. });
  558. }
  559. console.log("详情激励顺序", rewardIndexList);
  560. // 处理相关视频数据
  561. // const formattedVideos = relatedVideos.map((video,index) => ({
  562. // id: video.id,
  563. // title: video.title,
  564. // adType:'video',
  565. // tag_id: video.tag_ids[0],
  566. // cover_image: video.cover_image,
  567. // playCount: video.views || '0',
  568. // likeCount: video.like || '0',
  569. // shareCount: video.share || '0',
  570. // }));
  571. const formattedVideos = relatedVideos.map((video, index) => {
  572. video.adType = "video";
  573. video.lock = rewardIndexList.includes(index);
  574. return video;
  575. });
  576. this.setData({
  577. relatedVideos: formattedVideos,
  578. });
  579. console.log("相关视频", formattedVideos);
  580. } catch (error) {
  581. console.error("获取相关视频失败:", error);
  582. }
  583. },
  584. // 激励视频加载
  585. rewardVideoLoad() {
  586. if (wx.createRewardedVideoAd) {
  587. let that = this;
  588. this.videoAd = wx.createRewardedVideoAd({
  589. adUnitId: apple.ads.rewardAdId,
  590. });
  591. this.videoAd.onLoad(() => {
  592. console.log("详情页激励load success");
  593. });
  594. this.videoAd.onError((err) => {
  595. console.log("详情页激励load error", err);
  596. });
  597. this.videoAd.onClose((res) => {
  598. // 用户点击了【关闭广告】按钮
  599. this.setData({
  600. isLoadingVideo: false,
  601. });
  602. console.log("详情页激励close", res);
  603. if (res && res.isEnded) {
  604. SendEvent("rewardad_finish", {
  605. video_id: this.unlockVideo.id,
  606. tag_id: this.unlockVideo.tag_ids[0],
  607. });
  608. // 发放奖励
  609. if (this.rewardType === 1) {
  610. this.setData({
  611. [`videoInfo.lock`]: false,
  612. });
  613. const video = this.getCurrentVideoContext();
  614. video.play();
  615. } else {
  616. wx.redirectTo({
  617. url: this.unlockUrl,
  618. });
  619. }
  620. } else {
  621. // 未看完整视频
  622. // wx.showModal({
  623. // title: '提示',
  624. // content: '您需要观看完毕才能进行文章查看,重新播放广告吗?',
  625. // success (res) {
  626. // if (res.confirm) {
  627. // that.rewardVideoPlayFn()
  628. // } else if (res.cancel) {
  629. // console.log('用户点击取消')
  630. // }
  631. // }
  632. // })
  633. }
  634. });
  635. }
  636. },
  637. // 激励视频展示
  638. rewardVideoPlayFn() {
  639. wx.showLoading({
  640. title: "解锁视频中",
  641. });
  642. setTimeout(function () {
  643. wx.hideLoading();
  644. }, 2000);
  645. this.videoAd.show().catch((err) => {
  646. console.log("激励视频播放失败", err);
  647. wx.showToast({
  648. title: "激励视频广告播放失败,请稍后再试",
  649. icon: "none",
  650. });
  651. });
  652. },
  653. // 进入页面插屏
  654. interstitalEnterPageShow() {
  655. insertAdInterval = setTimeout(() => {
  656. console.log("详情页进入页面插屏调用");
  657. this.insertAdType = 2;
  658. this.interstitalPlayFn();
  659. }, 5000);
  660. },
  661. // 插屏广告加载
  662. interstitalLoad() {
  663. // const _this = this
  664. interstitialAd = wx.createInterstitialAd({
  665. adUnitId: apple.ads.insertAdId,
  666. });
  667. interstitialAd.onLoad(() => {
  668. console.log("视频详情页插屏广告 load success");
  669. });
  670. interstitialAd.onError((err) => {
  671. console.log("视频详情页插屏广告onError", err);
  672. });
  673. interstitialAd.onClose(() => {
  674. console.log("视频详情页插屏广告onClose");
  675. this.makeVideoPlay();
  676. });
  677. },
  678. // 插屏广告展示
  679. interstitalPlayFn() {
  680. // 视频播放中私聊和群聊才能显示插屏
  681. const scene = wx.getStorageSync("scene");
  682. if (scene !== 1008 && scene !== 1007) {
  683. return;
  684. }
  685. // const _this = this
  686. if (interstitialAd) {
  687. interstitialAd
  688. .show()
  689. .then(() => {
  690. console.log("插屏显示,视频暂停");
  691. if (this.insertAdType !== 1) {
  692. setTimeout(() => {
  693. this.makeVideoPause();
  694. }, 500);
  695. }
  696. })
  697. .catch((err) => {
  698. if (this.insertAdType !== 1) {
  699. setTimeout(() => {
  700. this.makeVideoPlay();
  701. }, 1000);
  702. }
  703. console.error("视频详情页插屏显示错误", err);
  704. });
  705. }
  706. },
  707. });