内容提要
本文总结了音视频Android面试题,包括SurfaceView与TextureView的区别、MediaCodec的零拷贝渲染、音频低延迟的Fast Path、OpenGL ES的多线程共享上下文,以及H.264视频的颜色问题及其解决方案。
关键要点
-
SurfaceView和TextureView的本质区别在于Surface的独立性和渲染方式。
-
SurfaceView适合极致性能和DRM视频播放,因其具备零拷贝特性。
-
使用MediaCodec进行异步解码时,避免直接操作ByteBuffer以实现零拷贝渲染。
-
Fast Path是Android音频系统中的低延迟通路,需匹配采样率和缓冲区大小以确保进入该通路。
-
OpenGL ES实现多线程共享上下文时,需注意EGL_BAD_ACCESS错误的原因及解决方案。
-
H.264视频颜色错乱通常因YUV格式不一致和Stride对齐问题,建议使用Surface输入以提高兼容性。
延伸问答
SurfaceView和TextureView的主要区别是什么?
SurfaceView拥有独立的Surface,适合高性能和DRM视频播放,而TextureView则是普通View,适合动画和变换。
如何在MediaCodec中实现零拷贝渲染?
在MediaCodec.configure()时直接传入Surface对象,并在onOutputBufferAvailable回调中调用releaseOutputBuffer,不获取ByteBuffer。
什么是Android音频系统中的Fast Path?
Fast Path是低延迟通路,绕过普通Mixer处理,直接将Buffer传递给ALSA驱动,延迟可低至10ms。
在多线程环境下如何使用OpenGL ES共享上下文?
创建主线程的EGLContext后,在编码线程创建时将其作为share_context参数传入,以共享纹理ID和缓冲对象。
H.264视频颜色错乱的原因是什么?
颜色错乱通常因YUV格式不一致和Stride对齐问题,需确保输入数据格式与编码器支持的格式匹配。
如何确保Android音频应用进入Fast Path?
确保采样率和缓冲区大小匹配设备原生值,并不使用任何软件音效。