简体   繁体   English

cordova媒体插件停止在Android 6上运行

[英]cordova media plugin stopped working on Android 6

I have an application on Google Play that streams music from a radio station built with the latest cordova (5.4) and I am using some of the basic plugins such as: 我在Google Play上有一个应用程序,可以播放使用最新的cordova(5.4)构建的广播电台的音乐,我正在使用一些基本的插件,例如:

  • device plugin 设备插件
  • crosswalk webview plugin crosswalk webview插件
  • dialogs plugin 对话框插件
  • ... ...
  • files plugin 文件插件
  • media plugin 媒体插件

On Android 5.0+ the streaming works fine but recently when I upgraded my nexus on android 6.0 the streaming stopped. 在Android 5.0+上,流媒体工作正常,但最近当我在Android 6.0上升级我的nexus时,流媒体停止了。 I updated media and file plugin to the latest versions (2.0.0 and 4.0.0 respectively), as cordova stated in their blog that these versions support the new permission checking on Android 6 but still the streaming is not working. 我将媒体和文件插件更新到最新版本(分别为2.0.0和4.0.0),因为cordova在他们的博客中表示这些版本支持Android 6上的新权限检查,但仍然无法使用流式传输。 The log gives me this: 日志给了我这个:

11-24 23:53:35.347 15184-15184/com.uni.app E/chromium: [ERROR:xwalk_autofill_client.cc(170)] Not implemented reached in virtual void xwalk::XWalkAutofillClient::OnFirstUserGestureObserved()
11-24 23:53:40.395 15184-15235/com.uni.app D/MediaPlayer: setSubtitleAnchor in MediaPlayer
11-24 23:53:40.410 15184-15235/com.uni.app W/MediaPlayer: Stream has no duration and is therefore not seekable.
11-24 23:53:40.410 15184-15235/com.uni.app E/MediaPlayer: error (-2147483648, 0)
11-24 23:53:40.410 15184-15235/com.uni.app D/AudioPlayer: Send a onStatus update for the new seek
11-24 23:53:40.410 15184-15235/com.uni.app W/CordovaPlugin: Attempted to send a second callback for ID: Media951412725 Result was: {"action":"status","status":{"id":"d5334ff7-5511-ea09-b2ef-2900789941a9","msgType":3,"value":0}}
11-24 23:53:40.411 15184-15235/com.uni.app E/MediaPlayer: start called in state 0
11-24 23:53:40.411 15184-15235/com.uni.app E/MediaPlayer: error (-38, 0)
11-24 23:53:40.412 15184-15235/com.uni.app W/CordovaPlugin: Attempted to send a second callback for ID: Media951412725 Result was: {"action":"status","status":{"id":"d5334ff7-5511-ea09-b2ef-2900789941a9","msgType":1,"value":2}}
11-24 23:53:40.412 15184-15235/com.uni.app E/MediaPlayer: Attempt to call getDuration without a valid mediaplayer
11-24 23:53:40.412 15184-15235/com.uni.app E/MediaPlayer: error (-38, 0)
11-24 23:53:40.412 15184-15235/com.uni.app W/CordovaPlugin: Attempted to send a second callback for ID: Media951412725 Result was: {"action":"status","status":{"id":"d5334ff7-5511-ea09-b2ef-2900789941a9","msgType":2,"value":314586.9375}}
11-24 23:53:40.413 15184-15235/com.uni.app E/MediaPlayer: Error (-2147483648,0)
11-24 23:53:40.413 15184-15235/com.uni.app D/AudioPlayer: on completion is calling stopped
11-24 23:53:40.414 15184-15235/com.uni.app W/CordovaPlugin: Attempted to send a second callback for ID: Media951412725 Result was: {"action":"status","status":{"id":"d5334ff7-5511-ea09-b2ef-2900789941a9","msgType":1,"value":4}}
11-24 23:53:40.414 15184-15235/com.uni.app E/MediaPlayer: Error (-38,0)
11-24 23:53:40.414 15184-15235/com.uni.app D/AudioPlayer: on completion is calling stopped
11-24 23:53:40.414 15184-15235/com.uni.app E/MediaPlayer: Error (-38,0)
11-24 23:53:40.414 15184-15235/com.uni.app D/AudioPlayer: on completion is calling stopped
11-24 23:53:53.476 15184-15184/com.uni.app E/chromium: [ERROR:xwalk_autofill_client.cc(170)] Not implemented reached in virtual void xwalk::XWalkAutofillClient::OnFirstUserGestureObserved()
11-24 23:53:58.409 15184-15232/com.uni.app E/Surface: getSlotFromBufferLocked: unknown buffer: 0xaed05f70
11-24 23:53:58.419 15184-15184/com.uni.app W/ScreenOrientationListener: Removing an inexistent observer!
11-24 23:53:58.419 15184-15184/com.uni.app E/chromium: [ERROR:runtime_javascript_dialog_manager.cc(69)] Not implemented reached in virtual void xwalk::RuntimeJavaScriptDialogManager::ResetDialogState(content::WebContents*)
11-24 23:53:58.453 15184-15184/com.uni.app D/AudioPlayer: renaming /storage/emulated/0/tmprecording.3gp to /storage/emulated/0/http://IPADDRESS:PORT/;
11-24 23:53:58.454 15184-15184/com.uni.app E/AudioPlayer: FAILED renaming /storage/emulated/0/tmprecording.3gp to /storage/emulated/0/http://IPADDRESS:PORT/;
11-24 23:53:58.465 15184-15197/com.uni.app E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb3978f90

IPADDRESS:PORT is a real http://ipaddress:port URL stream which works fine. IPADDRESS:PORT是一个真正的http:// ipaddress:端口 URL流,工作正常。

I now it has to do with the permissions but still no luck on finding exactly what. 我现在它与权限有关,但仍然没有找到确切的运气。 Going on app-info and on new permissions menu I see that the app uses Microphone, Phone and Storage permissions which are all enabled. 继续使用app-info和新权限菜单,我看到该应用程序使用了所有已启用的麦克风,电话和存储权限。 I searched a lot and couldn't be able to find something similar. 我搜索了很多,无法找到类似的东西。

Any help is appreciated 任何帮助表示赞赏

I found the problem, just comment this line on AudioPlayer.java 我发现了这个问题,只需在AudioPlayer.java上注释这一行

public void onPrepared(MediaPlayer player) {
    // Listen for playback completion
    this.player.setOnCompletionListener(this);
    // seek to any location received while not prepared
    //this.seekToPlaying(this.seekOnPrepared);
    // If start playing after prepared
    if (!this.prepareOnly) {
        this.player.start();
        this.setState(STATE.MEDIA_RUNNING);
        this.seekOnPrepared = 0; //reset only when played
    } else {
        this.setState(STATE.MEDIA_STARTING);
    }
    // Save off duration
    this.duration = getDurationInSeconds();
    // reset prepare only flag
    this.prepareOnly = true;

    // Send status notification to JavaScript
    sendStatusChange(MEDIA_DURATION, null, this.duration);
}

Checked on Github in the official repo and found this 在官方回购中检查了Github并发现了这一点

Tried on a new sample app and worked fine on my Android 6.0 device. 试用一个新的示例应用程序,并在我的Android 6.0设备上正常工作。 The solution is close to what luckakashi suggested with some extra commenting. 解决方案接近于luckakashi建议的一些额外评论。

Seems something wrong from Crosswalk, have you try if you remove the Crosswalk plugin? Crosswalk似乎有问题,如果你删除了Crosswalk插件,你试试吗? And is your Android 6.0 device 64-bit? 你的Android 6.0设备是64位吗?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM