我的应用程序是一个使用 Starling 引擎并播放流媒体视频的 Air 应用程序。
由于Starling对Video播放的支持不是很好,所以我决定走原生的路,自己写了一个ANE来播放视频。
我启动了一个带有 VideoView 的新 Activity 来显示视频,在较新的 Android(测试 API 级别 19 和 18)上,当调用 MediaController.show() 时,应用程序崩溃了。我没有有用的堆栈跟踪,因为 Android 位被编译为 native 扩展。 在旧设备上(在 API 级别 15 和 9 上测试),MediaController 工作正常。
我还尝试用播放/暂停 ImageView 替换 MediaController,同样,它在旧设备上工作正常,而在较新的设备上它播放一次显示的图像,第二次不显示图像(对象仍然创建和布局的 child )和应用程序第三次完全崩溃。
在较新的设备上,如果我删除 ImageView 应用程序不会崩溃,如果我保留 ImageView 附加,并且不调用 requestWindowFeature(Window.FEATURE_NO_TITLE)。
这是适用于旧设备的代码(使用 MediaController):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//this works proven with Android API Level 15 and lower. On Kitkat and 4.3 it blows up (18 and above)
if(Build.VERSION.SDK_INT <= 15)
requestWindowFeature(Window.FEATURE_NO_TITLE);
int resourceId = PlayVideoFunction.ctx.getResourceId("layout.main");
setContentView(resourceId);
Log.d("NativeExtension", "OnCreate " + this.toString());
Log.d("NativeExtension", "On Resume");
String url = getIntent().getStringExtra("url");
Log.d("NativeExtension", "url " + url);
int videoViewId = PlayVideoFunction.ctx.getResourceId("id.videoView");
videoView = (VideoView) findViewById(videoViewId);
videoView.setVideoURI(Uri.parse(url));
videoView.setOnCompletionListener(this);
videoView.setOnErrorListener(this);
videoView.setOnPreparedListener(this);
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(videoView);
mediaController.setMediaPlayer(videoView);
videoView.setMediaController(mediaController);
}
有人遇到过与 native 扩展相关的类似问题吗?我的猜测是,它必须对 Android 和 Air/Starling 中的 Window 对象执行某些操作。除此之外,我迷路了。
编辑:在此处发布 logcat(要粘贴的字符太多) http://pastebin.com/tnuEgWFA
最佳答案
我放弃了弄清楚它崩溃的原因,并最终找到了两种处理视频播放的方法。
在较新的设备(Jelly Bean 及更高版本)上,我只是启动设备上的默认视频播放器来观看视频。他们可以很好地处理切换回空气。
然而,在旧设备上,我在 native 扩展本身内显示视频 - 使用 VideoView 和 MediaController。这样我就不必冒 air/starling 应用程序被 Android 的 GC 离开时被杀死的风险。
关于android - Adobe Air Native Extensions 和 VideoView - 调用 MediaController.show() 时在较新的设备上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22048856/