vlc-video解码后的输出路径

    技术2022-07-14  85

    做播放器类的app开发,有很多的多媒体框架可以选择,vlc就是其中之一,其他的比如ijkplayer vitamio等,总的来说他们的功能都是一致的,即音视频文件的解复用,解码,这些功能被封装成java sdk,简化app开发人员的调用。 现在有个疑问,如果是使用android系统提供的 mediaplayer进行播放,最终解码出来的yuv数据流可以知道mediaplayer内部给到surface 输出了,那这些第三方的框架自己解码出来的 yuv数据,怎么配合输出到android显示呢? 也就是说使用了那些android系统提供的接受 yuv数据播放的接口?所以这里从vlc源码来分析下,vlc 解码后的yuv video数据输出到哪里去了。同样 音频解码后的输出,在我之前的一篇博客中有分析:https://blog.csdn.net/u012459903/article/details/103727581 vlc 3.0.6源码, 从源码 /input/decoder.c  的函数 DecoderPlayVideo() ,即解码完后输出video到 video ouput设备,在vlc_vout.h中有介绍 struct vout_thread_t 结构体,其中包含的 struct vout_thread_sys_t,这个就是所有video输出模块应该实现对接的一个结构体,vlc模块化的结构,  在src/videoout/video_output.c  中:

    static vout_thread_t *VoutCreate(vlc_object_t *object, const vout_configuration_t *cfg) { video_format_t original; if (VoutValidateFormat(&original, cfg->fmt)) return NULL; /* Allocate descriptor */ vout_thread_t *vout = vlc_custom_create(object, sizeof(*vout) + sizeof(*vout->p), "video output"); }

    创建"video output" 能力的module. 所以下面就按照这个struct vout_thread_sys_t结构体在全工程中查找video out模块了。也可以通过“video output” 关键字来查找。每一个video out模块都有应该有类似如下:

    vlc_module_begin() ... set_capability("vout display", /*10*/0) ... vlc_module_end()

    这样的模块描述。 1.0 Aa.c : "vout display" module using aalib 2.0 caca.c: Color ASCII Art "vout display" module using libcaca 3.0 clone.c : Clone video plugin for vlc  只是克隆出来另一份 4.0 decklink.cpp: BlackMagic DeckLink SDI输出模块 5.0 direct3d11.c: Windows Direct3D11 video output module 6.0  direct3d9.c: Windows Direct3D9 video output module 7.0 directdraw.c: Windows DirectDraw video output 8.0 modulse/hw/vpdau/display.c : VDPAU is the Video Decode and Presentation API for UNIX. It provides an interface to video decode acceleration and presentation hardware present in modern GPUs   gpu显卡接口 9.0 modules/video_outpu/android/display.c  android 的video输出,这就是我要找的,可以看到对应子目录 /module/video_output/android/:   文件 utils.h :终于使用到了 android的接口。这个部分怎么使用还得单独研究研究 10.0 modules/video_output/opengl/display.c  openGL接口,android也支持opengGL 11.0 evas.c  : EFL Evas video output https://www.enlightenment.org/  Enlightenment Foundation Libraries, or EFL, are the set of libraries used to create the Enlightenment Window Manager DR17 (E17) 不知道是什么时候的产物,好冷门的样子 12.0 fb.c :framebuffer plugin linux基于framebuffer设备的输出 13.0 flaschentaschen.c: Flaschen-Taschen video output display for vlc cf. https://github.com/hzeller/flaschen-taschen 不认识,好像树莓派有关 14.0 glwin32.c: Windows OpenGL provider 15.0 kva.c: KVA video output plugin  16.0 shm.c Wayland shared memory video output module for VLC media player 共享内存的方式输出给其他程序使用 17.0 vdummy.c: Dummy video output display method for testing purposes dump输出调试使用 18.0 vmem.c: memory video driver for vlc 19.0 modules/codec/omxil/vout.c :OpenMAX IL video output  输出给openmax 20.0 mmal.c: MMAL-based vout plugin for Raspberry Pi 21.0 wingdi.c : Win32 / WinCE GDI video output plugin for vlc 22.0 x11.c X C Bindings video output module for VLC media player 23.0 xvideo.c X C Bindings video output module for VLC media player 24.0 yuv.c : yuv video output 输出yuv流到文件,或者设备文件从这些moudle来看,video输出到android,一个途径是使用了android的nativewindow, 另一个就是走opengGL

    Processed: 0.014, SQL: 9