在看opencore的打印信息的时候,在输出部分一会Sink一会MIO个,搞不清,看了相关代码总算有点头绪,以函数handleSetVideoSurface为基础说一下
(1)构建一个AndroidSurfaceOutput(针对视频的,如果是音频,就是AndroidAudioOutput或AndroidAudioStream)
(2)再构建一个PVMediaOutputNode,继承基本的node接口,并包含指向AndroidSurfaceOutput的指针量,对于视频这就是videonode;
(3)最后构建PVPlayerDataSinkPVMFNode,继承PVPlayerDataSink,这就是最终的Datasink,包含指向node的指针,对于视频也就是保存指针PVMediaOutputNode的指针
也就是说对于音频和视频,仅仅是在最低一层(这样说是不是很不专业)AndroidSurfaceOutput和AndroidAudioOutput不同。