android - React Native(Android)检测远程视频网址上​​存在声音

标签 android react-native android-mediaplayer

我想创建一个原生 android 模块来检测视频中是否存在音轨。现在我正在使用 MediaPlayer,但没有调用 onPrepared。我错过了什么吗? native 模块也正确 bundle 。我的日志显示 MediaPlayer:无法在客户端打开文件;尝试服务器端:java.io.FileNotFoundException:没有内容提供商:https://storage.googleapis.com/SPECIAL_FILE.mp4

public class RNSoundDetectionModule extends ReactContextBaseJavaModule {

  private final ReactApplicationContext reactContext;

  public RNSoundDetectionModule(ReactApplicationContext reactContext) {
    super(reactContext);
    this.reactContext = reactContext;
  }
  @ReactMethod
  public void doesLocalVideoHaveAudioTrack(String path, Callback cb) {
    boolean audioTrack =false;

    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    retriever.setDataSource(path);
    String hasAudioStr = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_HAS_AUDIO);
    if(hasAudioStr!=null && hasAudioStr.equals("yes")){
     audioTrack=true; }
    else{
    audioTrack=false; }
    try {
      cb.invoke(audioTrack, null);
    } catch (Exception e) {
      cb.invoke(e.toString(), null);
    }
  }

  @ReactMethod
  public void getRemoteAudioTracks(String path, final Callback cb) {
    try {
      MediaPlayer mediaPlayer = new MediaPlayer();
      mediaPlayer.setDataSource(path);
      mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){

      @Override
          public void onPrepared(MediaPlayer mp) {
              cb.invoke(mp.getTrackInfo(), null);
          }
      });
      mediaPlayer.prepareAsync();
    } catch (IOException e) {
      cb.invoke(e.toString(), null);
    }
  }
  @Override
  public String getName() {
    return "RNSoundDetection";
  }
}

最佳答案

已修复 - 请在此处查看我的图书馆:https://github.com/evanjmg/react-native-sound-detection

关于android - React Native(Android)检测远程视频网址上​​存在声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53503522/

相关文章:

javascript - React-Native-Maps 如何绘制折线

react-native - 如何从抽屉导航器菜单导航到特定选项卡 native react

android - 我怎么玩彩信://link in android media player

android - 在 cordova 2.0 中使用 FileTransfer-plugin 时出现 EPIPE(破管)错误

android - 使用旧密码登录 Google 帐户 - 如何重定向到蓝色 Google 登录页面?

android - AppBarLayout、NestedScrollView、FrameLayout,这是怎么回事?

android-studio - React-native (Signed) release apk 在设备中不断崩溃

android - MediaPlayer是否可以在所有API版本的android中使用?

android - 如何在没有任何延迟的情况下在android中循环播放音频文件?

java - 如何在其他应用程序(例如Web)中使用Android R.java?