【vlc-android】
文章平均质量分 57
vlc-android模块底层源码实现分析
小白兔LHao
当你的才华还撑不起你的野心时,就应该静下心来学习 - Brave Rabbit.
敢于创新,敢于迎接挑战,敢于承担责任 能够承受压力.
展开
-
【十五】【vlc-android】vlc-sout流媒体输出端源码实现分析【Part 3】【02】
此章节分析承接上一章分析:【十五】vlc-sout流媒体输出端源码实现分析【Part 3】【01】1.1.2.1、net_ListenSingle实现分析:【本地IP地址和端口号】// [vlc/src/network/udp.c]static int net_ListenSingle (vlc_object_t *obj, const char *host, int port, int protocol){ // 网络地址信息原创 2021-01-26 10:08:33 · 430 阅读 · 2 评论 -
【十五】【vlc-android】vlc-sout流媒体输出端源码实现分析【Part 3】【01】
接着第十五章节【Part 1】小节分析:本章分析【不需要加载流复用器模块功能】时的媒体流处理承接上一章节:【十五】【vlc-android】vlc-sout流媒体输出端源码实现分析【Part 1】1、Add实现分析:// 【vlc/modules/stream_output/rtp.c】// 注译:添加一个ES流数据作为一个新的RTP流数据/** Add an ES as a new RTP stream */static sout_stream_id_sys_t *Add( sout_str原创 2021-01-26 10:03:22 · 375 阅读 · 0 评论 -
【十五】【vlc-android】vlc-sout流媒体输出端源码实现分析【Part 2】【04】
此章节分析承接上一章分析:【十五】【vlc-android】vlc-sout流媒体输出端源码实现分析【Part 2】【03】10.6.1、block_ChainGather实现分析:注意:根据全项目搜索查找实现,block数据块结构体中的该字段【p_block->i_length】代表的意思大致为,当前block数据显示的时长。如若是视频block数据块,则表示当前视频图像应该显示的时长//【vlc/inlcude/vlc_block.h】static inline block_t *blo原创 2021-01-26 09:48:41 · 376 阅读 · 0 评论 -
【十五】【vlc-android】vlc-sout流媒体输出端源码实现分析【Part 2】【03】
此章节分析承接上一章分析:【十五】【vlc-android】vlc-sout流媒体输出端源码实现分析【Part 2】【02】10.1.5、bs_read_ue实现分析:// 【vlc/include/vlc_bits.h】// 读取指数哥伦布编码,其实就是哥伦布解码过程得到真实的int数值/* Read unsigned Exp-Golomb code */static inline uint_fast32_t bs_read_ue( bs_t * bs ){ unsigned i =原创 2021-01-26 09:41:05 · 805 阅读 · 0 评论 -
【十五】【vlc-android】vlc-sout流媒体输出端源码实现分析【Part 2】【02】
此章节分析承接上一章分析:【十五】【vlc-android】vlc-sout流媒体输出端源码实现分析【Part 2】【01】9、block_SkipBytes实现分析:// 【vlc/include/vlc_block_helper.h】static inline int block_SkipBytes( block_bytestream_t *p_bytestream, size_t i_data ){ return原创 2021-01-26 09:30:15 · 439 阅读 · 0 评论 -
【十五】【vlc-android】vlc-sout流媒体输出端源码实现分析【Part 2】【01】
【备注:当前章节由于篇幅内容长度问题,因此再次拆分成小章节分析组成】接着第十五章节【Part 1】小节分析,可知有如下packetizer模块加载:若sout不为空时在【vlc/src/input/decoder.c】的【LoadDecoder】方法中会加载【module_need( p_dec, “packetizer”, “$packetizer”, false );】模块。整个项目中全局查找packetizer模块a52.c (vlc\modules\packetizer) line 52 :原创 2021-01-26 09:23:42 · 522 阅读 · 0 评论 -
【十五】【vlc-android】vlc-sout流媒体输出端源码实现分析【Part 1】
由前第5章节分析第【1.2.1.1】小节(EsCreateDecoder实现分析:【vlc/src/input/es_out.c】中)分析可知sout媒体流输出端对象初始化大致流程概述:// sout对象为【sout_instance_t】结构体信息(可能为空当设置了renderer时),// 该信息定义为流输出实例即Stream Output,初始化流程:InitSout方法【vlc/src/input/input.c】-->// input_resource_RequestSout方法【vl原创 2021-01-26 09:11:27 · 907 阅读 · 0 评论 -
【十四】【vlc-android】aout音频输出模块源码实现分析【Part 1】
接着第九章节分析aout输出组件模块的加载和实现分析。有第九章节第2小节中可知,加载的模块名为【“audio output”】通过全局搜索有如下android端支持组件模块:// 第1种方式audiotrack.c (vlc\modules\audio_output) line 183 : set_capability( "audio output", 180 )// 第2种方式// 将pcm源数据保存到文件中file.c (vlc\modules\audio_output) lin原创 2020-12-18 15:18:47 · 1030 阅读 · 0 评论 -
【十四】【vlc-android】aout音频输出模块源码实现分析【Part 2】
该章节承接上一章节内容继续分析上一章节:3、Stop实现分析:【停止AudioTrack线程等相关操作】// [vlc/modules/audio_output/audiotrack.c]static voidStop( audio_output_t *p_aout ){ aout_sys_t *p_sys = p_aout->sys; JNIEnv *env; if( !( env = GET_ENV() ) ) return; /*原创 2020-12-18 15:18:03 · 2937 阅读 · 0 评论 -
【十三】【vlc-anroid】EGL OpenGL模块组件加载源码实现分析
由第十二章节分析,可知,vlc使用OpenGL加载时,android端会加载【“opengl”】名的组件模块。如下找到该组件声明:// 【vlc/modules/video_output/opengl/egl.c】vlc_module_begin () set_shortname (N_("EGL")) set_description (N_("EGL extension for OpenGL")) set_category (CAT_VIDEO) set_subca原创 2020-12-18 15:04:58 · 692 阅读 · 0 评论 -
【十二】【vlc-anroid】视频图像display展示层模块源码分析-OpenGL ES2交互渲染
接着第十章节分析。本章节分析openGL默认展示方式。// 第1种图像输出层展示方式display.c (vlc\modules\video_output\android) line 63 : set_capability("vout display", 260)display.c (vlc\modules\video_output\android) line 69 : set_capability("vout display", 280)// 第2种图像输出层展示方式原创 2020-12-18 15:03:11 · 691 阅读 · 0 评论 -
【十一】【vlc-anroid】视频图像展示window模块组件实现分析
有第十章中分析,在android设备上,通过模块组件搜索可知android设备上加载window如下:window.c (vlc\modules\video_output\android) line 54 : set_capability("vout window", 10)1、其模块初始化分析:// [vlc/modules/video_output/android/window.c]vlc_module_begin() set_shortname(N_("Android Win原创 2020-12-09 21:04:52 · 257 阅读 · 0 评论 -
【十】【vlc-anroid】视频图像display展示层模块源码分析-SurfaceView交互渲染
由此前分析过的vlc组件模块加载方式可知,display模块也是类似方式。而视频图像展示方式在vlc-android端可分析两种一种是OpenGL渲染,另一种则是SurfaceView这种原生Android API展示。此篇分析SurfaceView展示方式。1、由第八章【2.2小节分析】中对应的display模块组件加载创建调用方法待分析,如下:// [vlc/src/video_output/vout_wrapper.c]int vout_OpenWrapper(vout_thread_t *v原创 2020-12-09 20:59:29 · 979 阅读 · 0 评论 -
【九】【vlc-android】vlc-aout音频流输出端源码分析
【以mp4文件格式和H264编码的本地文件为例展开分析】由前章节分析可知aout音频输出端对象初始化和vout视频输出端类似,则由第七章分析可知:aout输出端对象初始化方法为【CreateDecoder】中的【p_dec->pf_aout_format_update = aout_update_format;】方法指针赋值调用的。// [vlc/src/input/decoder.c]// vout赋值初始化方法指针赋值static decoder_t * CreateDecoder( v原创 2020-12-05 15:43:43 · 885 阅读 · 0 评论 -
【八】【vlc-android】vlc-vout视频流输出端源码分析
【以mp4文件格式和H264编码的本地文件为例展开分析】1、由前面章节分析过可知vout结构体信息对象初始化是在decoder层的CreateDecoder方法中:// [vlc/src/input/decoder.c]// vout赋值初始化方法指针赋值static decoder_t * CreateDecoder( vlc_object_t *p_parent, input_thread_t *p_input,原创 2020-12-05 15:37:35 · 1240 阅读 · 0 评论 -
【七】【vlc-android】vlc的decoder控制层传输数据与ffmpeg音频解码模块decoder层进行解码的数据交互流程源码分析
【以mp4文件格式和AAC、H264编码的本地文件为例展开分析】由第六章节可知音频解码器的加载方式与视频解码器也是类似的。通过此前分析过的模块加载方式,可找到ffmpeg解码和编码模块的初始化加载如下:// 位于[vlc/modules/codec/avcodec/avcodec.c]vlc_module_begin () set_shortname( "FFmpeg") set_category( CAT_INPUT ) set_subcategory( SUBCAT_I原创 2020-12-05 15:32:36 · 773 阅读 · 0 评论 -
【六】【vlc-android】vlc的decoder控制层传输数据与ffmpeg视频解码模块decoder层的数据交互流程源码分析
【以mp4文件格式和H264编码的本地文件为例展开分析】1、接着前面章节的p_dec->pf_decode( p_dec, p_block )实现分析:由此前分析decoder初始化过程可知:decoder加载了具体的解码模块,因此该方法是在解码模块加载时模块初始化入口方法中进行赋值的,因此此处以分析h264格式来进行编码流程分析。首先找到ffmpeg中对应的libavcodec模块有三个:video、audio、subtitle(字幕信息)。通过此前分析过的模块加载方式,可找到ffmpeg解原创 2020-12-03 23:03:11 · 1420 阅读 · 1 评论 -
【五】【vlc-android】demuxer层与vlc的decoder控制层数据交互及其控制流程源码分析
【以mp4文件格式和H264编码的本地文件为例展开分析】1、根据前面分析已知晓有一个es_out_t及其es_out_id_t结构体记录输出流信息,在根据其字段定义可知其与decoder层进行交互://【vlc/src/input/es_out.c】中struct es_out_id_t{/* ES ID */int i_id;es_out_pgrm_t *p_pgrm;/* */bool b_scrambled;/* Channel in the track type *原创 2020-12-03 23:01:39 · 788 阅读 · 0 评论 -
【四】【vlc-android】播放控制交互与demux解复用层、媒体数据流拉取层的具体数据传递和控制流程源码分析
1、VLC中有很多demux/mux/encoder/decoder模块,因此需要先了解这些模块的加载原理,模块的加载原理基本一致,因此举例分析MP4解复用模块如何加载完成的,主要流程如下:// vlc中MP4解复用模块的实现代码位于【vlc/modules/demux/mp4/mp4.c】中// 模块声明加载代码片段:vlc_module_begin ()set_category( CAT_INPUT )set_subcategory( SUBCAT_INPUT_DEMUX )set_desc原创 2020-12-03 22:59:54 · 1168 阅读 · 0 评论 -
【三】vlc android native层播放流程源码分析
播放(控制)器组件:org.videolan.libvlc.MediaPlayer媒体数据实体类:org.videolan.medialibrary.interfaces.media.MediaWrapper播放布局组件:org.videolan.libvlc.util.VLCVideoLayout播放器设置:val media = mediaFactory.getFromUri(VLCInstance.getInstance(service), uri)1、设置播放开始时间点字段:med原创 2020-12-03 22:56:11 · 1673 阅读 · 0 评论 -
【二】vlc-android架构模块组成
VLC-Android编译根据该网址编译指导即可完成。【当然会遇到很多坑,但基本网上已给出答案】指导网址:[https://wiki.videolan.org/AndroidCompile/]项目安卓模块基本使用Kotlin编写application:应用模块,包含以下9个模块:live-plot-graph: 自定义控件模块,aar模块donations:谷歌官方支付模块,aar模块mediadb:媒体数据库ZOOM操作模块,aar模块moviepedia:媒体搜索模块,aar模块res原创 2020-12-03 22:52:38 · 723 阅读 · 0 评论 -
【一】vlc-android在linux编译下载/编译失败解决办法
问题1:方案一:VLC下载组件库认证Hash不通过时可通过以下方式避免不实现检查hash即可:.sum-aom: aom-$(AOM_VERSION).tar.gz$(warning $@ not implemented)touch $@aom: aom-$(AOM_VERSION).tar.gz .sum-aomrm -Rf @−@-@−(AOM_VERSION) $@mkdir -p @−@-@−(AOM_VERSION)tar xvzfo “$<” -C @−@-@−(AOM_V原创 2020-12-03 22:44:50 · 495 阅读 · 0 评论