Cordova和3PP原生媒体播放器库在Android中提供致命信号11



我正在尝试将第三方产品原生媒体播放器集成为Cordova插件。这给我带来了很多问题,让他们合作。我写了一篇解释,试图尽我所能概括我对这个问题的了解。我只是想先写个简短的介绍。任何和所有的提示和答案都非常感激。由于大小的限制,我将发布参考成功运行作为另一个帖子在这个线程。我也会把我的问题贴在这里以及后面的解释:

那么我的问题是:你们中有人有任何经验可以帮助解决这个问题吗?任何关于3PP原生视频与Cordova在一起可能会非常有帮助。

上图试图以某种方式解释cordova应用程序的层次结构。这当然是一种简化,很可能是不正确的,因为它是我对文本中参考系统的理解的代表。

我们要做的

我们的应用程序旨在通过webview中的本机视频播放器播放安全加密的视频流。这就是它的简短形式。更详细地说:今天我们有一个基本的IPTV网络应用程序。然而,HTML5视频播放器不能处理我们的加密流。相反,我们将使其成为Cordova/Phonegap插件,其中web应用程序仍然是主要应用程序,但将html5视频播放器替换为本机3pp库并显示播放视频(清晰(未加密/打开)流)。对于用户来说,它看起来和感觉还是一样的,但是解密和回放完全由本地cordova插件处理。然后播放表面视图被适当放置以显示。

我们做了什么

我们已经创建了cordova项目,让它运行web应用程序,并创建了一个插件结构。我们还创建了粗略的VideoPlayer(目前还不接受控制输入,只播放一组视频),它封装了第三方产品库。它管理大约50%的时间的播放,当它完成时,表面显示出来,视频按我们想要的方式播放。但是,在向本机库初始化play命令的过程中,大约有一半的时间我们会得到一个停止执行的错误。

(从日志输出中删除与3PP和公司相关的名称,作为附录,我将包括成功运行的日志,以供下面参考)

05-14 13:55:18.682  17515-17515/se.zxzzxzxz.videoplayer D/dalvikvm﹕ Late-enabling CheckJNI
05-14 13:55:18.682  17515-17515/se.zxzzxzxz.videoplayer D/dalvikvm﹕ Try to disable coredump for pid 17515
05-14 13:55:18.822  17515-17515/se.zxzzxzxz.videoplayer I/CordovaLog﹕ Changing log level to DEBUG(3)
05-14 13:55:18.822  17515-17515/se.zxzzxzxz.videoplayer I/CordovaLog﹕ Found start page location: http:// local network adress:8888/androidindex.html
05-14 13:55:18.822  17515-17515/se.zxzzxzxz.videoplayer D/Whitelist﹕ Unlimited access to network resources
05-14 13:55:18.822  17515-17515/se.zxzzxzxz.videoplayer D/CordovaActivity﹕ CordovaActivity.onCreate()
05-14 13:55:18.842  17515-17515/se.zxzzxzxz.videoplayer I/dalvikvm﹕ Could not find method org.apache.cordova.CordovaWebView.setWebContentsDebuggingEnabled, referenced from method org.apache.cordova.CordovaWebView.setup
05-14 13:55:18.842  17515-17515/se.zxzzxzxz.videoplayer W/dalvikvm﹕ VFY: unable to resolve static method 9717: Lorg/apache/cordova/CordovaWebView;.setWebContentsDebuggingEnabled (Z)V
05-14 13:55:18.842  17515-17515/se.zxzzxzxz.videoplayer D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x00be
05-14 13:55:19.052  17515-17515/se.zxzzxzxz.videoplayer I/webclipboard﹕ clipservice: android.sec.clipboard.ClipboardExManager@2110fd50
05-14 13:55:19.082  17515-17515/se.zxzzxzxz.videoplayer D/CordovaWebView﹕ CordovaWebView is running on device made by: samsung
05-14 13:55:19.092  17515-17515/se.zxzzxzxz.videoplayer D/JsMessageQueue﹕ Set native->JS mode to 2
05-14 13:55:19.092  17515-17515/se.zxzzxzxz.videoplayer D/CordovaActivity﹕ CordovaActivity.init()
05-14 13:55:19.142  17515-17515/se.zxzzxzxz.videoplayer D/CordovaWebView﹕ >>> loadUrl(http:// local server adress:8888/androidindex.html)
05-14 13:55:19.142  17515-17515/se.zxzzxzxz.videoplayer D/PluginManager﹕ init()
05-14 13:55:19.142  17515-17515/se.zxzzxzxz.videoplayer D/CordovaWebView﹕ >>> loadUrlNow()
05-14 13:55:19.142  17515-17515/se.zxzzxzxz.videoplayer D/WebView﹕ loadUrlImpl: called
05-14 13:55:19.142  17515-17515/se.zxzzxzxz.videoplayer I/CordovaLog﹕ Changing log level to DEBUG(3)
05-14 13:55:19.142  17515-17515/se.zxzzxzxz.videoplayer I/CordovaLog﹕ Found start page location: http:// local server adress:8888/androidindex.html
05-14 13:55:19.142  17515-17515/se.zxzzxzxz.videoplayer D/Whitelist﹕ Unlimited access to network resources
05-14 13:55:19.142  17515-17515/se.zxzzxzxz.videoplayer D/CordovaActivity﹕ Resuming the App
05-14 13:55:19.142  17515-17515/se.zxzzxzxz.videoplayer D/CordovaActivity﹕ CB-3064: The errorUrl is null
05-14 13:55:19.172  17515-17515/se.zxzzxzxz.videoplayer D/SoftKeyboardDetect﹕ Ignore this event
05-14 13:55:19.192  17515-17544/se.zxzzxzxz.videoplayer V/webkit﹕ BrowserFrame constructor: this=Handler (android.webkit.BrowserFrame) {2110c420}
05-14 13:55:19.212  17515-17544/se.zxzzxzxz.videoplayer D/webcore﹕ CORE loadUrl: called
05-14 13:55:19.212  17515-17544/se.zxzzxzxz.videoplayer D/webkit﹕ Firewall not null
05-14 13:55:19.212  17515-17544/se.zxzzxzxz.videoplayer D/webkit﹕ euler: isUrlBlocked = false
05-14 13:55:19.232  17515-17515/se.zxzzxzxz.videoplayer D/libEGL﹕ loaded /vendor/lib/egl/libEGL_POWERVR_SGX544_115.so
05-14 13:55:19.272  17515-17515/se.zxzzxzxz.videoplayer D/libEGL﹕ loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX544_115.so
05-14 13:55:19.312  17515-17515/se.zxzzxzxz.videoplayer D/libEGL﹕ loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX544_115.so
05-14 13:55:19.362  17515-17515/se.zxzzxzxz.videoplayer D/OpenGLRenderer﹕ Enabling debug mode 0
05-14 13:55:19.362  17515-17515/se.zxzzxzxz.videoplayer D/WebView﹕ onSizeChanged - w:1280 h:775
05-14 13:55:19.402  17515-17515/se.zxzzxzxz.videoplayer D/CordovaActivity﹕ onMessage(onPageStarted,http:// local server adress:8888/androidindex.html)
05-14 13:55:19.402  17515-17515/se.zxzzxzxz.videoplayer D/SoftKeyboardDetect﹕ Ignore this event
05-14 13:55:19.772  17515-17515/se.zxzzxzxz.videoplayer D/CordovaLog﹕ http:// local server adress:8888/js/bundle.js: Line 9764 : initializing mediaplayer
05-14 13:55:19.772  17515-17515/se.zxzzxzxz.videoplayer I/Web Console﹕ initializing mediaplayer:9764
05-14 13:55:19.862  17515-17515/se.zxzzxzxz.videoplayer D/CordovaLog﹕ http:// local server adress:8888/js/bundle.js: Line 10659 : [object Object]
05-14 13:55:19.862  17515-17515/se.zxzzxzxz.videoplayer I/Web Console﹕ [object Object]:10659
05-14 13:55:19.872  17515-17515/se.zxzzxzxz.videoplayer D/CordovaActivity﹕ onMessage(spinner,stop)
05-14 13:55:19.892  17515-17515/se.zxzzxzxz.videoplayer D/TilesManager﹕ Starting TG #0, 0x637bb530
05-14 13:55:19.892  17515-17515/se.zxzzxzxz.videoplayer D/TilesManager﹕ new EGLContext from framework: 613fcac0
05-14 13:55:19.892  17515-17515/se.zxzzxzxz.videoplayer D/GLWebViewState﹕ Reinit shader
05-14 13:55:19.892  17515-17515/se.zxzzxzxz.videoplayer D/GLWebViewState﹕ Reinit transferQueue
05-14 13:55:19.952  17515-17544/se.zxzzxzxz.videoplayer I/GATE﹕ <GATE-M>DEV_ACTION_COMPLETED</GATE-M>
05-14 13:55:19.952  17515-17515/se.zxzzxzxz.videoplayer D/CordovaWebViewClient﹕ onPageFinished(http:// local server adress:8888/androidindex.html)
05-14 13:55:19.952  17515-17515/se.zxzzxzxz.videoplayer D/CordovaActivity﹕ onMessage(onPageFinished,http:// local server adress:8888/androidindex.html)
05-14 13:55:19.952  17515-17515/se.zxzzxzxz.videoplayer D/CordovaLog﹕ http:// local server adress:8888/js/bundle.js: Line 11295 : Received Event: deviceready
05-14 13:55:19.952  17515-17515/se.zxzzxzxz.videoplayer I/Web Console﹕ Received Event: deviceready:11295
05-14 13:55:19.972  17515-17515/se.zxzzxzxz.videoplayer V/VideoPlayer﹕ Attached
05-14 13:55:19.972  17515-17515/se.zxzzxzxz.videoplayer V/VideoPlayer﹕ se.zxzzxzxz.videoplayer.VideoPlayer@21102cd8
05-14 13:55:19.972  17515-17515/se.zxzzxzxz.videoplayer V/VideoPlayer﹕ onCreate
05-14 13:55:19.972  17515-17515/se.zxzzxzxz.videoplayer V/VideoPlayer﹕ onCreateView
05-14 13:55:19.972  17515-17515/se.zxzzxzxz.videoplayer V/VideoPlayer﹕ com.android.internal.policy.impl.PhoneLayoutInflater@21103958
05-14 13:55:19.972  17515-17515/se.zxzzxzxz.videoplayer W/ResourceType﹕ No package identifier when getting name for resource number 0x009a2112
05-14 13:55:19.972  17515-17515/se.zxzzxzxz.videoplayer V/VideoPlayer﹕ android.widget.FrameLayout{21133b68 V.E..... ........ 0,0-320,150 #9a2112}
05-14 13:55:19.972  17515-17515/se.zxzzxzxz.videoplayer V/VideoPlayer﹕ onActivityCreated
05-14 13:55:19.972  17515-17515/se.zxzzxzxz.videoplayer V/VideoPlayer﹕ onStart
05-14 13:55:19.972  17515-17515/se.zxzzxzxz.videoplayer I/VideoPlayer﹕ onResume
05-14 13:55:20.032  17515-17515/se.zxzzxzxz.videoplayer V/VideoPlayer﹕ SurfaceView created
05-14 13:55:20.032  17515-17515/se.zxzzxzxz.videoplayer V/VideoPlayer﹕ Initializing Media Player
05-14 13:55:20.032  17515-17515/se.zxzzxzxz.videoplayer V/VideoPlayer﹕ SurfaceView Changed
05-14 13:55:20.972  17515-17522/se.zxzzxzxz.videoplayer D/dalvikvm﹕ Rejecting registerization due to +iget-quick v3, v5, (#20)
05-14 13:55:21.042  17515-17522/se.zxzzxzxz.videoplayer D/dalvikvm﹕ Rejecting registerization due to +iget-quick v3, v5, (#20)
05-14 13:55:22.102  17515-17515/se.zxzzxzxz.videoplayer V/WebViewInputDispatcher﹕ blockWebkitDraw
05-14 13:55:22.102  17515-17515/se.zxzzxzxz.videoplayer V/WebViewInputDispatcher﹕ blockWebkitDraw lockedfalse
**THIS IS WHERE PLAYBACK ACTION IS REQUESTED FROM MEDIA PLAYER**
05-14 13:55:22.282  17515-17613/se.zxzzxzxz.videoplayer V/VideoPlayer﹕ Thread[pool-1-thread-1,5,main]
05-14 13:55:22.292  17515-17613/se.zxzzxzxz.videoplayer I/class com.zxz.playerapi.HLSPlayer﹕ zxzzxzMediaPlayer()
05-14 13:55:22.292  17515-17613/se.zxzzxzxz.videoplayer V/@@@zxz_BasePlayer﹕ getMainLooper()1
05-14 13:55:22.292  17515-17613/se.zxzzxzxz.videoplayer V/@@@zxz_BasePlayer﹕ zxz_BasePlayer Init -
05-14 13:55:22.292  17515-17613/se.zxzzxzxz.videoplayer D/dalvikvm﹕ Trying to load lib /data/app-lib/se.zxzzxzxz.videoplayer-1/libvodl.so 0x422034a0
05-14 13:55:22.292  17515-17613/se.zxzzxzxz.videoplayer D/﹕ calling hookDlopen()!
05-14 13:55:22.292  17515-17613/se.zxzzxzxz.videoplayer D/﹕ calling hookCheckABI2Header()!
05-14 13:55:22.292  17515-17613/se.zxzzxzxz.videoplayer D/﹕ calling houdiniHookInit()!
05-14 13:55:22.342  17515-17515/se.zxzzxzxz.videoplayer D/HTML5VideoViewProxy﹕ handleMessage - SEEK
05-14 13:55:22.352  17515-17613/se.zxzzxzxz.videoplayer D/houdini﹕ [17613] Loading library(version: 3.3.3.43422 RELEASE)... successfully.
05-14 13:55:22.362  17515-17613/se.zxzzxzxz.videoplayer D/dalvikvm﹕ Added shared lib /data/app-lib/se.zxzzxzxz.videoplayer-1/libvodl.so 0x422034a0
05-14 13:55:22.362  17515-17613/se.zxzzxzxz.videoplayer D/dalvikvm﹕ No JNI_OnLoad found in /data/app-lib/se.zxzzxzxz.videoplayer-1/libvodl.so 0x422034a0, skipping init
05-14 13:55:22.362  17515-17613/se.zxzzxzxz.videoplayer D/dalvikvm﹕ Trying to load lib /data/app-lib/se.zxzzxzxz.videoplayer-1/libzxz_Eng.so 0x422034a0
05-14 13:55:22.362  17515-17613/se.zxzzxzxz.videoplayer D/﹕ calling hookDlopen()!
05-14 13:55:22.362  17515-17613/se.zxzzxzxz.videoplayer D/﹕ calling hookCheckABI2Header()!
05-14 13:55:22.362  17515-17613/se.zxzzxzxz.videoplayer D/﹕ calling houdiniHookInit()!
05-14 13:55:22.362  17515-17522/se.zxzzxzxz.videoplayer D/dalvikvm﹕ Rejecting registerization due to move v5, v4, (#0)
05-14 13:55:22.362  17515-17613/se.zxzzxzxz.videoplayer D/dalvikvm﹕ Added shared lib /data/app-lib/se.zxzzxzxz.videoplayer-1/libzxz_Eng.so 0x422034a0
05-14 13:55:22.362  17515-17613/se.zxzzxzxz.videoplayer D/﹕ calling hookJniOnload()!
05-14 13:55:22.362  17515-17613/se.zxzzxzxz.videoplayer V/@@@zxz_StreamSDK.java﹕ getMainLooper()
05-14 13:55:22.372  17515-17522/se.zxzzxzxz.videoplayer D/dalvikvm﹕ Rejecting registerization due to move v5, v4, (#0)
05-14 13:55:22.402  17515-17613/se.zxzzxzxz.videoplayer V/xzVideoRender.java﹕ Construct!
05-14 13:55:22.402  17515-17613/se.zxzzxzxz.videoplayer I/@@@xzAudioRender﹕xzAudioRender Construct
05-14 13:55:22.402  17515-17613/se.zxzzxzxz.videoplayer I/@@@zxz_StreamSDK.java﹕ init spend time is 35
05-14 13:55:22.402  17515-17613/se.zxzzxzxz.videoplayer V/@@@zxzxzBasePlayer﹕ zxz_BasePlayer Init +, return is 0
05-14 13:55:22.402  17515-17613/se.zxzzxzxz.videoplayer I/@@@zxz_BasePlayer﹕ /data/app-lib/se.zxzzxzxz.videoplayer-1/libvoDRMJNI.so is not exiest.
05-14 13:55:22.402  17515-17613/se.zxzzxzxz.videoplayer V/class com.mot.playerapi.HLSPlayer﹕ MediaPlayer is created.
05-14 13:55:22.402  17515-17613/se.zxzzxzxz.videoplayer E/@@@zxz_BasePlayer﹕ to set parameter to HashMap! id = 3000013
05-14 13:55:22.402  17515-17613/se.zxzzxzxz.videoplayer E/@@zxz_BasePlayer﹕ to set parameter to HashMap! id = 3000014
05-14 13:55:22.402  17515-17613/se.zxzzxzxz.videoplayer V/@@@zxz_BasePlayer﹕ setDisplay suface is android.view.SurfaceView{21134db8 V.E..... ......ID 0,515-320,665}
05-14 13:55:22.402  17515-17613/se.zxzzxzxz.videoplayer V/@@@zxz_StreamSDK.java﹕ setDisplay suface is android.view.SurfaceView$4@21135100
05-14 13:55:22.402  17515-17613/se.zxzzxzxz.videoplayer V/xzVideoRender.java﹕ setSurfaceHolder use RGBA8888!
05-14 14:09:58.282  18934-18975/se.zxzzxzxz.videoplayer E/@@@zxz_BasePlayer﹕ to set parameter to HashMap! id = 3000001
05-14 14:09:58.282  18934-18975/se.zxzzxzxz.videoplayer E/@@@zxz_BasePlayer﹕ to set parameter to HashMap! id = 3000002
05-14 14:09:58.282  18934-18975/se.zxzzxzxz.videoplayer E/@@@zxz_BasePlayer﹕ to set parameter to HashMap! id = 300000c
05-14 14:09:58.282  18934-18975/se.zxzzxzxz.videoplayer V/@@@zxz_BasePlayer﹕ Start ClosedCaption!
05-14 14:09:58.282  18934-18975/se.zxzzxzxz.videoplayer V/@@@zxz_BasePlayer﹕ zxz_BasePlayer Open -
05-14 14:09:58.282  18934-18975/se.zxzzxzxz.videoplayer V/@@@zxz_DataSource.java﹕ Befor loadLibrary, zxz_Source
05-14 14:09:58.282  18934-18975/se.zxzzxzxz.videoplayer D/dalvikvm﹕ Trying to load lib /data/app-lib/se.zxzzxzxz.videoplayer-1/libvodl.so 0x421fc410
05-14 14:09:58.282  18934-18975/se.zxzzxzxz.videoplayer D/dalvikvm﹕ Shared lib '/data/app-lib/se.zxzzxzxz.videoplayer-1/libvodl.so' already loaded in same CL 0x421fc410
05-14 14:09:58.292  18934-18975/se.zxzzxzxz.videoplayer D/dalvikvm﹕ Trying to load lib /data/app-lib/se.zxzzxzxz.videoplayer-1/libzxz_Source.so 0x421fc410
05-14 14:09:58.292  18934-18975/se.zxzzxzxz.videoplayer D/﹕ calling hookDlopen()!
05-14 14:09:58.292  18934-18975/se.zxzzxzxz.videoplayer D/﹕ calling hookCheckABI2Header()!
05-14 14:09:58.292  18934-18975/se.zxzzxzxz.videoplayer D/﹕ calling houdiniHookInit()!
05-14 14:09:58.292  18934-18975/se.zxzzxzxz.videoplayer D/dalvikvm﹕ Added shared lib /data/app-lib/se.zxzzxzxz.videoplayer-1/libzxz_Source.so 0x421fc410
05-14 14:09:58.292  18934-18941/se.zxzzxzxz.videoplayer D/dalvikvm﹕ Rejecting registerization due to and-int/lit8 v4, v6, (#15)
05-14 14:09:58.292  18934-18975/se.zxzzxzxz.videoplayer D/dalvikvm﹕ No JNI_OnLoad found in /data/app-lib/se.zxzzxzxz.videoplayer-1/libzxz_Source.so 0x421fc410, skipping init
05-14 14:09:58.292  18934-18975/se.zxzzxzxz.videoplayer V/@@@zxz_DataSource.java﹕ after loadLibrary, zxz_Source
05-14 14:09:58.292  18934-18975/se.zxzzxzxz.videoplayer I/@@@zxz_DataSource.java﹕ sourceType is 0, initParamFlag is 0
05-14 14:09:58.312  18934-18950/se.zxzzxzxz.videoplayer A/libc﹕ Fatal signal 11 (SIGSEGV) at 0x79454b7c (code=2), thread 18950 (WebViewCoreThre)
05-14 14:09:58.312  18934-18975/se.zxzzxzxz.videoplayer A/libc﹕ Fatal signal 11 (SIGSEGV) at 0x7ad640d4 (code=2), thread 18975 (pool-1-thread-1)
05-14 14:09:58.322  18934-18934/se.zxzzxzxz.videoplayer A/libc﹕ Fatal signal 11 (SIGSEGV) at 0x7ad6efbc (code=2), thread 18934 (ive.videoplayer) 

在输出中可以看到许多警告和较小的错误。但是,无论回放成功与否,它们都不会停止执行并存在。当接收到各种致命信号11时,执行停止。不幸的是,这些并不是每次都一样。

可能原因及解决方法

为了解决这些问题,我尝试了很多不同的方法,我将我的一些理论写在这里供参考。

  • 一开始我以为这是WebCore线程和主线程之间的线程/并发问题。我被引导到这条道路,因为说"android.view的错误。ViewRoot$ callledfromwrongthreadeexception:只有创建视图层次结构的原始线程才能触摸其视图",我花了一段时间才获得不同的调用和回调,所有回调都在主线程上执行。我设法使它在主线程上运行,然而,问题仍然存在,从而消除了它只是webcore和ui线程之间的线程问题的可能性。
  • 关闭和打开硬件加速,不工作
  • 尝试不同的硬件,不工作。
  • 在没有cordova的新项目中启动视频播放器,这工作完美,因此不是参数问题,因为此时使用了相同的播放器参数。
  • 启动视频播放器,以便在创建时以设置的流开始播放,从而消除来自webcor线程的调用。这工作得很好,增加了我的困惑,因为我认为我消除了它是线程问题的可能性。
  • 尝试了不同的流,没有效果。
  • 我留下的想法是,它与预编译的第三方本地视频播放器库和cordova之间的交互有关,在较低的层次上或在项目的构建中。

那么我的问题是:你们中有人有任何经验可以帮助解决这个问题吗?任何关于3PP原生视频与Cordova在一起可能会非常有帮助。

PS:这是我的第一个stackoverflow问题,很抱歉格式不太好。

好了,现在我们已经明白了问题是什么,现在我有时间了,我想我应该分享一下。

从日志(05-14 14:09:58.292 18934-18975/se.zxzzxzxz)中可以看出。videoplayer D/: calling houdini hookinit ()!)现在你可能会问什么是胡迪尼。

Houdini帮助在x86内核上模拟arm行为,以便arm库可以在设备上使用(为arm编写的本机android代码如何在x86上运行?)

所以,我们的问题的答案是,我们使用的是arm编译库,但我们的设备有一个x86内核。仿真中出现了故障,导致了段错误。我们已经换了设备,现在一切正常。

谢谢你看这篇文章,我希望它能帮助你。

最新更新