简单地说,我对注4合并两个开源的应用程序到一个新的VR应用程序,所以这只能运行和使用S6的GearVR耳机。 我的应用程式适用于奇巧,但视频是黑色棒棒糖。 这两个源的应用提供的棒棒糖都工作得不错。
我从GL纹理形成的表面:
glGenTextures( 1, &textureId );
glBindTexture(GL_TEXTURE_EXTERNAL_OES, textureId);
glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_EXTERNAL_OES, 0);
这被放入该被放进一个表面的表面纹理,这被张望了一下过去,然后发送到视频解码器:
videoDecoder = MediaCodec.createByCodecName(decoderName);
MediaFormat videoFormat = MediaFormat.createVideoFormat("video/avc", width, height);
videoDecoder.configure(videoFormat, ((SurfaceHolder)renderTarget).getSurface(), null, 0);
videoDecoder.setVideoScalingMode(MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT);
// OMX.qcom.video.decoder.avc gets picked for decodername
// Width and height at 1280x720 everywhere
纹理被更新,并且结合于一个表面和渲染。
这完全适用于奇巧。 在棒棒糖,视频是全黑的。
你可以在这里看到日志的差异(好奇巧红色,坏棒棒糖绿色):
https://www.diffchecker.com/lxxopmhc
没有站出来对我来说是特别丰富。
(该消息do not know color format 0x7fa30c04 = 2141391876
从我能找到的是刚刚从原来解码器ID添加到名字的东西,应该不会影响任何东西。另一个解码器不把这个消息,但也不起作用。)
添加一个明确的颜色格式的MediaFormat,并与色彩格式和图像尺寸其他地方没有任何效果摆弄(仅黑屏,没有错误)
我可以在表面上锁定画布和drawARGB(255,0,255,0),屏幕变为绿色。
我创建的表面的子类,记录每一个公共方法,并通过了该解码器,和他们没有接到电话(不是初始化等,当我创造了它),在奇巧或棒棒糖,工作或没有,这样对我说什么都没有。
做视频解码器设置的代码来自月光,这工作完全正常的棒棒糖:
github.com/moonlight-stream/moonlight-android
另一半是魔环电影院,其显示使用android.media.MediaPlayer表面上,并能正常工作的棒棒糖。
所以我的问题是关于棒棒糖什么改变,或者你有什么我做错了,我怎么能调试这个问题的任何进一步的?
我的代码是在这里:
https://github.com/GTMoogle/StreamTheater
更新6/2:
试图从下面的Q11建议http://bigflake.com/mediacodec/设置缓冲区的位置和界限,但仍然没有输出,虽然我可能会错误地实现它。 也照顾了一些depricated的电话,也没有效果。
上更新:从dequeueOutputBuffer的BufferInfo似乎总是有8,0尺寸偏差,不设置标志。 不知道什么是健康的流样子呢。