Android 在RecyclerView中显示MediaStream对象后,是否有正确的方法来处置/释放它?
我正在尝试在Android 在RecyclerView中显示MediaStream对象后,是否有正确的方法来处置/释放它?,android,webrtc,webrtc-android,Android,Webrtc,Webrtc Android,我正在尝试在RecyclerView中显示MediaStream对象的列表。目前,我的同伴在我们初次握手时给了我所有的MediaStream对象,我可以在一个列表视图项中显示它们,该列表视图项有一个自定义的TextureView。当我有大量的流可以滚动时,问题就出现了。在滚动足够多的列表项后,我最终崩溃了 当我的列表项被回收时,我尝试使用MediaStream#dispose()函数。这似乎避免了使用太多解码器资源的问题,但也使流无法再次查看。如果用户想要滚动到已处理的流,则我的应用程序会崩溃,
RecyclerView
中显示MediaStream
对象的列表。目前,我的同伴在我们初次握手时给了我所有的MediaStream
对象,我可以在一个列表视图项中显示它们,该列表视图项有一个自定义的TextureView
。当我有大量的流可以滚动时,问题就出现了。在滚动足够多的列表项后,我最终崩溃了
当我的列表项被回收时,我尝试使用MediaStream#dispose()
函数。这似乎避免了使用太多解码器资源的问题,但也使流无法再次查看。如果用户想要滚动到已处理的流,则我的应用程序会崩溃,例外情况是MediaStreamTrack已处理。
尝试启用MediaStream
的VideoTrack
我希望从视频曲目videoTrack?.removeSink(cameraStreamView)
中移除接收器,以及在我的TextureView中调用EGLRender上的release()
函数的组合足以清理onViewRecycled()
中的媒体流
但是,在将列表向下滚动足够远后,我得到了错误:
无法用错误0xFFFFF4实例化编解码器“OMX.qcom.video.decoder.avc”。
我认为这是因为我没有在旋转编解码器的过程中完全清理和释放编解码器,并且资源不足
有人知道为了正确清理MediaStream
资源/用于解码它们的编解码器,是否需要调用某个函数吗?有没有关于这种情况的文件
谢谢
private fun destroyCameraStream() {
videoTrack?.removeSink(cameraStreamView)
cameraStreamView.release()
}
fun release() {
eglRenderer.release()
}