【问题标题】:How can I determine if a video has just finished using expo.video? ReactNative/Expo.io如何确定视频是否刚刚完成使用 expo.video? ReactNative/Expo.io
【发布时间】:2018-02-04 11:15:23
【问题描述】:

例如,如果我有组件:

import React, { Component } from 'react';
import { Video } from 'expo';
let styles = require('../stylesheet.js');
export default class Player extends Component {
  render(){
    return(
     <Video
      ref={this._handleVideoRef}
      source={require(//file)}
      rate={1.0}
      volume={1.0}
      muted={false}
      useNativeControls
      resizeMode="cover"
      shouldPlay
      style={styles.player} />
      )
  }
}

我在文档(https://docs.expo.io/versions/latest/sdk/av.html) 中看到使用“playbackstatus.didJustFinish”和 onPlaybackStatusUpdate,但他们的示例对我来说没有多大意义。谁能告诉我如何使用我的代码确定视频是否已结束?

【问题讨论】:

    标签: javascript react-native expo


    【解决方案1】:

    如果其他人来寻找答案,以下是 OP 和 docs(https://docs.expo.io/versions/latest/sdk/av.html) 的组合:

    import React, { Component } from 'react';
    import { Video } from 'expo';
    
    export default class Player extends Component {
      _onPlaybackStatusUpdate = playbackStatus => {
        if (playbackStatus.didJustFinish)
          // The player has just finished playing and will stop.
      };
    
      render(){
        return(
          <Video
            ref={this._handleVideoRef}
            source={require(//file)}
            onPlaybackStatusUpdate=
              {(playbackStatus) => this._onPlaybackStatusUpdate(playbackStatus)}/>
            resizeMode="cover"
            style={styles.player}
        );
      }
    }
    

    【讨论】:

    • 我的 onstatusupdate 没有运行 status = false :(
    【解决方案2】:

    mauriii 回答对我来说从来没有用过,因为当playbackStatus.didJustFinish 变为 true 时没有调用 onPlaybackStatusUpdate,但是我在 console.logging 播放状态之后注意到还有另外两个字段 durationMillis 和 positionMillis 所以当这些值相等时,我们知道视频是完整的

    所以更新那个答案

    export default class Player extends Component {
      _onPlaybackStatusUpdate = playbackStatus => {
        if (playbackStatus.durationMillis === playbackStatus.positionMillis)
          // The player has just finished playing and will stop.
      };
    
      render(){
        return(
          <Video
            ref={this._handleVideoRef}
            source={require(//file)}
            onPlaybackStatusUpdate=
              {(playbackStatus) => this._onPlaybackStatusUpdate(playbackStatus)}/>
            resizeMode="cover"
            style={styles.player}
        );
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多