PlayerComponent.ets 3.31 KB
import { LiveDetailsBean } from 'wdBean/Index';
import { WDPlayerController, WDPlayerRenderVLiveView, WDPlayerRenderView } from 'wdPlayer/Index';
import { PictureLoading } from './PictureLoading';

const TAG = 'PlayerComponent'

@Component
export struct PlayerComponent {
  @Prop playerController: WDPlayerController;
  @Consume @Watch('updateData') liveDetailsBean: LiveDetailsBean
  @Consume @Watch('pageShowChange') pageShow: number
  @Consume @Watch('pageHideChange') pageHide: number
  @State bottomSafeHeight: number = AppStorage.get<number>('bottomSafeHeight') || 0
  @State topSafeHeight: number = AppStorage.get<number>('topSafeHeight') || 0
  @State imgUrl: string = ''
  @State isWait: boolean = false
  @State liveStreamType: number | null = -1
  @State playUrl: string = ''
  @State isCanplay: boolean = false

  pageShowChange() {
    this.playerController?.play()
  }

  pageHideChange() {
    this.playerController?.pause()
  }

  aboutToAppear(): void {
    console.log(TAG, 'aboutToAppear')
    this.playerController.onCanplay = () => {
      console.log('可以播放了')
      this.playerController?.play()
      this.isCanplay = true
    }
  }

  aboutToDisappear(): void {
    this.playerController.onCanplay = () => {
    }
    this.playerController?.pause()
    this.playerController?.stop()
    this.playerController?.release()
  }

  updateData() {
    //直播新闻-直播状态  wait待开播running直播中end已结束cancel已取消paused暂停
    if (this.liveDetailsBean.fullColumnImgUrls && this.liveDetailsBean.fullColumnImgUrls.length > 0) {
      this.imgUrl = this.liveDetailsBean.fullColumnImgUrls[0].url
    }
    this.isWait = this.liveDetailsBean?.liveInfo?.liveState == 'wait'
    if (this.liveDetailsBean.liveInfo && this.liveDetailsBean.liveInfo.vlive.length > 0) {
      let playUrl = ''
      let liveStreamType: number | null = null
      if (this.liveDetailsBean.liveInfo.liveState == 'running') {
        playUrl = this.liveDetailsBean.liveInfo.vlive[0].liveUrl
        liveStreamType = this.liveDetailsBean.liveInfo.vlive[0].liveStreamType
      } else if (this.liveDetailsBean.liveInfo.liveState == 'end') {
        playUrl = this.liveDetailsBean.liveInfo.vlive[0].replayUri
        liveStreamType = this.liveDetailsBean.liveInfo.vlive[0].liveStreamType
      }

      this.liveStreamType = liveStreamType
      this.playUrl = playUrl

    }
  }

  build() {
    Column() {
      Stack() {
        // TODO:判断横竖屏,liveStreamType=1竖屏铺满屏幕,裁剪不拉伸,liveStreamType=0横屏正常展示
        if (this.liveStreamType == null || this.liveStreamType == 1) {
          WDPlayerRenderVLiveView({
            playerController: this.playerController,
            onLoad: () => {
              this.playerController?.firstPlay(this.playUrl);
            }
          })
        } else if (this.liveStreamType == 0) {
          WDPlayerRenderView({
            playerController: this.playerController,
            onLoad: () => {
              this.playerController?.firstPlay(this.playUrl);
            }
          }).margin({ top: 195 }).height(211)
        }

        PictureLoading().visibility(this.isCanplay ? Visibility.None : Visibility.Visible)
      }
      .height('100%')
      .width('100%')
      .align(Alignment.Top)
      .alignContent(Alignment.Top)
    }
    .height('100%')
    .width('100%')
  }
}