大家好,关于教育实践专题网站源码分享很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于教育实践项目的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
FFmpeg学习(1)开篇
FFmpeg学习(2)源码编译,环境配置
为什么要学习FFmpeg
本人希望打算深入研究音视频领域,音视频领域的内容很多,我自己打算从几方面循序渐进:FFmpeg常用功能实践,FFmpeg源码研究,OpenGL,OpenGLES,Metal,AR,WebRTC,直播架构等方向去研究。音视频目前主要有哪些应用场景呢?
直播类:音视频会议,教育直播,娱乐/游戏直播等(例如花椒,映客,腾讯课堂,腾讯会议,斗鱼)短视频:抖音,快手,小咖秀等,这类应用主要是对声音和视频做特殊处理,如声音变声,变调,男声变女声,女声变童声;如视频处理有:美颜,滤镜处理。网络视频:优酷,腾讯视频,爱奇艺等。音视频通话:微信,QQ,Skype等。视频监控:网络摄像机IPC等人工智能:人脸识别,智能音箱等,这类应用更关注于算法。
从上面这么多应用场景,我们可以看出音视频技术是多么重要,特别是5G时代,网络传输问题大大提升,更多的音视频需求会爆发出来。
我们可以看一下一个简单播放器的架构,如下图:
音频解码,视频解码一般都用FFmpeg解码,在IOS8之后提供了VideoToolBox框架支持硬解码。
而视频渲染一般使用OpenGL直接用GPU渲染,视频渲染第三方框架有GPUImage,SDL,VLC
音频视频播放涉及到音视频同步是一个复杂的技术。学习一个技术,需要一个高效的方法,只有不断的实践才能理解深刻。学习FFmpeg我们也需要好的文档来学习,下面列举一些必备的学习文档地址:
FFmpeg官方文档:ffmpeg.org/documentati…FFmpeg官方wiki:trac.ffmpeg.org
上述都是英文的文档,如果英文学习困难,可以参考下面的中文资料:
雷霄骅博士总结的资料:blog.csdn.net/leixiaohua1…罗索实验室:www.rosoo.netChinaFFmpeg:http://bbs/chinaffmpeg.com
此外推荐两本非常好的书籍:
FFmpeg从入门到精通音视频开发进阶指南:基于Android与iOS平台的实践
1.FFmpeg简介
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、MacOSX等。这个项目最早由FabriceBellard发起,2004年至2015年间由MichaelNiedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的&34;代表&34;一个伟大的软件产生必定有它的一段传奇历史,FFmpeg的创建者是法国天才程序员FabriceBellard(法布里斯*贝拉)在2000年是开发出初版;
法布里斯*贝拉:
高中就读期间开发了著名的可执行压缩程序LZEXE2000年创建了FFmpeg项目2011年,他用JavaScript写了一个Linux虚拟机(JSLinux)他还是QEMU,TinyCC的作者
2004年,迈克尔(MichaelNiedermayer)接管FFmpeg,迈克尔将滤镜子系统libavfilter加入FFmepg项目中,使得FFmpeg的多媒体处理更加多样,更加方便。在FFmpeg发布了0.5版本后,很长一段时间没有进行新版本的发布,直到后来FFmpeg采用Git作为版本控制服务器以后才开始继续更新发布版本。2011年3月,由于FFmpeg项目中有一些提交者对FFmpeg的项目管理方式和发展方向不一致,FFmpeg团队分成了两派,其中一派认为FFmpeg应该更加专注于音视频开发,研究更新先进的音视频技术,这些人重新创建了一个新的项目叫Libav。另外一派认为他们要兼顾老的FFmpeg技术,然后逐步发展。2015年8月迈克尔主动辞去FFmpeg项目负责人的职务。迈克尔从Libav中移植了大量的代码和功能到FFmpegZhong,从此Libav又和FFmpeg合并一起发展。相关学习资料推荐,点击下方链接免费报名,先码住不迷路~】
音视频免费学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpegwebRTCrtmphlsrtspffplaysrs等等)有需要的可以点击788280672加群免费领取~
2.FFmpeg能做什么
多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等视频采集功能:ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。在Linux平台上,ffmpeg对V4L2的视频设备提供了很好的支持,如:./ffmpeg-t10-fvideo4linux2-s176*144-r8-i/dev/video0-vcodech263-frtprtp://192.168.1.105:5060>/tmp/ffmpeg.sdp以上命令表示:采集10秒钟视频,对video4linux2视频设备进行采集,采集QCIF(176*144)的视频,每秒8帧,视频设备为/dev/video0,视频编码为H263,输出格式为RTP,后面定义了IP地址及端口,将该码流所对应的SDP文件重定向到/tmp/ffmpeg.sdp中,将此SDP文件上传到流媒体服务器就可以实现直播了。在windows下关于ffmpeg视频采集的资料非常少,但是ffmpeg还是支持windows下视频采集的。ffmpeg支持windows下videoforwindows(VFW)设备的视频采集,不过VFW设备已经过时,正在被WDM的视频设备所取代,但是ffmpeg还没有支持WDM的计划,不过好像有将WDM转为VFW的工具,因此ffmpeg还是可以在windows下进行视频采集的。视频格式转换功能:ffmpeg视频转换功能。视频格式转换,比如可以将多种视频格式转换为flv格式,可不是视频信号转换。ffmpeg可以轻易地实现多种视频格式之间的相互转换(wma,rm,avi,mod等),例如可以将摄录下的视频avi等转成视频网站所采用的flv格式。视频截图功能:对于选定的视频,截取指定时间的缩略图。视频抓图,获取静态图和动态图,不提倡抓gif文件;因为抓出的gif文件大而播放不流畅。给视频加水印功能使用ffmpeg视频添加水印(logo)。
我们先看一下一张FFmpeg的架构图:
下载好的源码,我们也可以看到大概的源码结构:
3.1libavutil
libavutil:包含一些公共的工具函数;AVUtil是FFmepg的核心工具库,该模块是最基础的模块之一,下面的许多其他模块都会依赖该库做一些基本的音视频处理操作。
3.2libavformat
libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;AVFormat是文件格式和协议库,封装了Protocol层和Demuxer,Muxer层,使得协议和格式对于开发者来说是透明的。AVFormat中实现了目前多媒体领域中的绝大多数媒体封装格式,包括封装和解封装,如MP4,FLV,KV,TS等文件封装格式,RTMP,RTSP,MMS,HLS等网络协议封装格式。
FFmpeg是否支持某种媒体封装格式,取决于编译时是否包含了该格式的封装库。根据实际需求,可进行媒体封装格式的扩展,增加自己定制的封装格式,即在AVFormat中增加自己的封装处理模块。
3.3libavcodec
libavcodec:用于各种类型声音/图像编解码;AVCodec是编解码库,该模块封装了Codec层,但是有一些Codec是具备自己的License的,FFmpeg是不会默认添加像libx264,FDK-AAC,lame等库的,但是FFmpeg就像一个平台一样,可以将其他的第三方的Codec以插件的方式添加进来,然后为开发者提供统一的接口。
AVCodec中实现了目前多媒体绝大多数的编解码格式,既支持编码,也支持解码。AVCodec除了支持MPEG4,AAC,MJPEG等自带的媒体编解码格式之外,还支持第三方的编解码器,如H.264(AVC)编码,需要使用x264编码器;H.265(HEVC)编码,需要使用x265编码器;MP3(mp3lame)编码,需要使用libmp3lame编码器。如果希望增加自己的编码格式,或者硬件编解码,则需要在AVCodec中增加相应的编解码模块。3.4libavfilter
AVFilter:是音视频滤镜库,该模块提供了包括音频特性和视频特效的处理,在使用FFmpeg的API进行编解码的过程中,直接使用该模块为音视频数据做特效处理时非常方便同时也非常高效的一种方式。
3.5libavdevice
AVDevice:输入输出设备,比如,需要编译出播放声音或者视频的工具ffplay,就需要确保该模块是打开的,同时也需要libSDL的预先编译,因为该设备模块播放声音与播放视频使用的都是libSDL库。
3.6libswscale
libswscale:用于视频场景比例缩放、色彩映射转换;SWScale模块是将图像进行格式转换的模块,例如,可以将YUV的数据转换为RGB的数据。
3.7libpostproc
libpostproc:用于后期效果处理;PostProc模块用来进行后期处理,当我们使用AVFilter的时候需要打开该模块的开关,因为Filter中会使用到该模块的一些基础函数。如果是比较老的FFmpeg版本,那么有可能还会编译处理avresample模块,该模块其实也是用于对音频原始数据进行重采样,但是现在已经被废弃了,不再推荐使用该库,而是使用swrresample库进行替代。
3.8libswrressample
SwrRessample模块可用于音频重采样,可以对数字音频进行声道数,数据格式,采样率等多种基本信息的转换。
3.9ffmpeg
ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;
3.10ffsever
ffsever:一个HTTP多媒体即时广播串流服务器;
3.11ffplay
ffplay:是一个简单的播放器,使用ffmpeg库解析和解码,通过SDL显示;
4.FFmpeg安装
从git下载源码:
gitclonehttps://gitfmpeg.org/ffmpeg.git
下载源码后,我们可以查看一下目录结构:
输入./configure–help命令查看配置信息
内容太多需要分页,输入./configure–help|more
从上面的帮助,我们可以尝试输入:./configure–list-decoders查看所有解码器
aacdstmp1s302m\naac_atdvaudiomp1_atsami\naac_fixeddvbsubmp1floatsanm\naac_latmdvdsubmp2sbc\naascdvvideomp2_atscpr\nac3dxamp2floatscreenpresso\nac3_atdxtorymp3sdx2_dpcm\nac3_fixeddxvmp3_atsgi\nacelp_kelvineac3mp3adusgirle\nadpcm_4xmeac3_atmp3adufloatsheervideo\nadpcm_adxeacmvmp3floatshorten\nadpcm_afceamadmp3on4sipr\nadpcm_agmeatgqmp3on4floatsiren\nadpcm_aicaeatgvmpc7smackaud\nadpcm_argoeatqimpc8smacker\nadpcm_cteightbpsmpeg1_cuvidsmc\nadpcm_dtkeightsvx_expmpeg1_v4l2m2msmvjpeg\nadpcm_eaeightsvx_fibmpeg1videosnow\nadpcm_ea_maxis_xaescape124mpeg2_crystalhdsol_dpcm\nadpcm_ea_r1escape130mpeg2_cuvidsonic\nadpcm_ea_r2evrcmpeg2_mediacodecsp5x\nadpcm_ea_r3exrmpeg2_mmalspeedhq\nadpcm_ea_xasffv1mpeg2_qsvsrgc\nadpcm_g722ffvhuffmpeg2_v4l2m2msrt\nadpcm_g726ffwavesynthmpeg2videossa\nadpcm_g726leficmpeg4stl\nadpcm_ima_alpfitsmpeg4_crystalhdsubrip\nadpcm_ima_amvflacmpeg4_cuvidsubviewer\nadpcm_ima_apcflashsvmpeg4_mediacodecsubviewer1\nadpcm_ima_apmflashsv2mpeg4_mmalsunrast\nadpcm_ima_cunningflicmpeg4_v4l2m2msvq1\nadpcm_ima_dat4flvmpegvideosvq3\nadpcm_ima_dk3fmvcmpl2tak\nadpcm_ima_dk4fourxmmsa1targa\nadpcm_ima_ea_eacsfrapsmscctarga_y216\nadpcm_ima_ea_seadfrwumsmpeg4_crystalhdtdsc\nadpcm_ima_issg2mmsmpeg4v1text\nadpcm_ima_mtfg723_1msmpeg4v2theora\nadpcm_ima_okig729msmpeg4v3thp\nadpcm_ima_qtgdvmsrletiertexseqvideo\nadpcm_ima_qt_atgifmss1tiff\nadpcm_ima_radgremlin_dpcmmss2tmv\nadpcm_ima_smjpeggsmmsvideo1truehd\nadpcm_ima_ssigsm_msmszhtruemotion1\nadpcm_ima_wavgsm_ms_atmts2truemotion2\nadpcm_ima_wsh261mv30truemotion2rt\nadpcm_msh263mvc1truespeech\nadpcm_mtafh263_v4l2m2mmvc2tscc\nadpcm_psxh263imvdvtscc2\nadpcm_sbpro_2h263pmvhatta\nadpcm_sbpro_3h264mwsctwinvq\nadpcm_sbpro_4h264_crystalhdmxpegtxd\nadpcm_swfh264_cuvidnellymoserulti\nadpcm_thph264_mediacodecnuvutvideo\nadpcm_thp_leh264_mmalon2avcv210\nadpcm_vimah264_qsvopusv210x\nadpcm_xah264_rkmpppaf_audiov308\nadpcm_yamahah264_v4l2m2mpaf_videov408\nadpcm_zorkhappamv410\nagmhcapbmvb\naichcompcm_alawvble\nalachevcpcm_alaw_atvc1\nalac_athevc_cuvidpcm_blurayvc1_crystalhd\nalias_pixhevc_mediacodecpcm_dvdvc1_cuvid\nalshevc_qsvpcm_f16levc1_mmal\namr_nb_athevc_rkmpppcm_f24levc1_qsv\namrnbhevc_v4l2m2mpcm_f32bevc1_v4l2m2m\namrwbhnm4_videopcm_f32levc1image\namvhq_hqapcm_f64bevcr1\nanmhqxpcm_f64levmdaudio\nansihuffyuvpcm_lxfvmdvideo\napehymtpcm_mulawvmnc\napngiacpcm_mulaw_atvorbis\naptxidcinpcm_s16bevp3\naptx_hdidfpcm_s16be_planarvp4\narbciff_ilbmpcm_s16levp5\nassilbcpcm_s16le_planarvp6\nasv1ilbc_atpcm_s24bevp6a\nasv2imcpcm_s24daudvp6f\natrac1imm4pcm_s24levp7\natrac3imm5pcm_s24le_planarvp8\natrac3alindeo2pcm_s32bevp8_cuvid\natrac3pindeo3pcm_s32levp8_mediacodec\natrac3palindeo4pcm_s32le_planarvp8_qsv\natrac9indeo5pcm_s64bevp8_rkmpp\naurainterplay_acmpcm_s64levp8_v4l2m2m\naura2interplay_dpcmpcm_s8vp9\navrninterplay_videopcm_s8_planarvp9_cuvid\navrpjacosubpcm_u16bevp9_mediacodec\navsjpeg2000pcm_u16levp9_qsv\navuijpeglspcm_u24bevp9_rkmpp\nayuvjvpcm_u24levp9_v4l2m2m\nbethsoftvidkgv1pcm_u32bevplayer\nbfikmvcpcm_u32levqa\nbinklagarithpcm_u8wavpack\nbinkaudio_dctlibaom_av1pcm_vidcwcmv\nbinkaudio_rdftlibaribb24pcxwebp\nbintextlibceltpgmwebvtt\nbitpackedlibcodec2pgmyuvwmalossless\nbmplibdav1dpgssubwmapro\nbmv_audiolibdavs2pictorwmav1\nbmv_videolibfdk_aacpixletwmav2\nbrender_pixlibgsmpjswmavoice\nc93libgsm_mspngwmv1\ncavslibilbcppmwmv2\nccaptionlibopencore_amrnbproreswmv3\ncdgraphicslibopencore_amrwbprosumerwmv3_crystalhd\ncdtoonslibopenh264psdwmv3image\ncdxllibopenjpegptxwnv1\ncfhdlibopusqcelpwrapped_avframe\ncinepaklibrsvgqdm2ws_snd1\nclearvideolibspeexqdm2_atxan_dpcm\ncljrlibvorbisqdmcxan_wc3\ncllclibvpx_vp8qdmc_atxan_wc4\ncomfortnoiselibvpx_vp9qdrawxbin\ncooklibzvbi_teletextqpegxbm\ncpialocoqtrlexface\ncscdlscrr10kxl\ncyuvm101r210xma1\ndcamace3ra_144xma2\nddsmace6ra_288xpm\nderf_dpcmmagicyuvralfxsub\ndfamdecrascxwd\ndiracmetasoundrawvideoy41p\ndnxhdmicrodvdrealtextylc\ndolby_emimicrl2yop\ndpxmjpegroqyuv4\ndsd_lsbfmjpeg_cuvidroq_dpcmzero12v\ndsd_lsbf_planarmjpeg_qsvrpzazerocodec\ndsd_msbfmjpegbrscczlib\ndsd_msbf_planarmlprv10zmbv\ndsicinaudiommvideorv20\ndsicinvideomotionpixelsrv30\ndss_spmovtextrv40\n
接下我们可以尝试输入:./configure–list-encoders查看所有编码器
接下我们可以尝试输入:./configure–list-filters查看所有滤镜器
abenchcolorholdilselectivecolor\nabitscopecolorkeyinflatesendcmd\nacompressorcolorkey_openclinterlaceseparatefields\nacontrastcolorlevelsinterleavesetdar\nacopycolormatrixjoinsetfield\nacrossfadecolorspacekerndeintsetparams\nacrossovercompandladspasetpts\nacrushercompensationdelaylagfunsetrange\nacueconcatlenscorrectionsetsar\naddroiconvolutionlensfunsettb\nadeclickconvolution_opencllibvmafsharpness_vaapi\nadeclipconvolvelifeshowcqt\nadelaycopylimitershowfreqs\naderivativecoreimageloopshowinfo\nadrawgraphcoreimagesrcloudnormshowpalette\naechocover_rectlowpassshowspatial\naemphasiscroplowshelfshowspectrum\naevalcropdetectlumakeyshowspectrumpic\naevalsrccrossfeedlutshowvolume\nafadecrystalizerlut1dshowwaves\nafftdncuelut2showwavespic\nafftfiltcurveslut3dshuffleframes\nafifodatascopelutrgbshuffleplanes\nafirdcshiftlutyuvsidechaincompress\nafirsrcdctdnoizlv2sidechaingate\naformatdebandmandelbrotsidedata\nagatedeblockmaskedclampsierpinski\nagraphmonitordecimatemaskedmaxsignalstats\nahistogramdeconvolvemaskedmergesignature\naiirdedotmaskedminsilencedetect\naintegraldeessermaskedthresholdsilenceremove\nainterleavedeflatemaskfunsinc\nalimiterdeflickermcdeintsine\nallpassdeinterlace_qsvmcompandsmartblur\nallrgbdeinterlace_vaapimediansmptebars\nallyuvdejuddermergeplanessmptehdbars\naloopdelogomestimatesobel\nalphaextractdenoise_vaapimetadatasobel_opencl\nalphamergederainmidequalizersofalizer\namergedeshakeminterpolatespectrumsynth\nametadatadeshake_openclmixsplit\namixdespillmoviespp\namoviedetelecinempdecimatesr\namplifydilationmptestsrcssim\namultiplydilation_openclnegatestereo3d\nanequalizerdisplacenlmeansstereotools\nanlmdndnn_processingnlmeans_openclstereowiden\nanlmsdoubleweavennedistreamselect\nanoisesrcdrawboxnoformatsubtitles\nanulldrawgraphnoisesuper2xsai\nanullsinkdrawgridnormalizesuperequalizer\nanullsrcdrawtextnullsurround\napaddrmeternullsinkswaprect\napermsdynaudnormnullsrcswapuv\naphasemeterearwaxocrtblend\naphaserebur128ocvtelecine\napulsatoredgedetectopenclsrctestsrc\narealtimeelbgoscilloscopetestsrc2\naresampleentropyoverlaythistogram\nareverseeqoverlay_cudathreshold\narnndnequalizeroverlay_openclthumbnail\naselecterosionoverlay_qsvthumbnail_cuda\nasendcmderosion_opencloverlay_vulkantile\nasetnsamplesextractplanesowdenoisetinterlace\nasetptsextrastereopadtlut2\nasetratefadepad_opencltmedian\nasettbfftdnoizpal100barstmix\nashowinfofftfiltpal75barstonemap\nasidedatafieldpalettegentonemap_opencl\nasoftclipfieldhintpaletteusetonemap_vaapi\nasplitfieldmatchpantpad\nasrfieldorderpermstranspose\nassfifoperspectivetranspose_npp\nastatsfillbordersphasetranspose_opencl\nastreamselectfind_rectphotosensitivitytranspose_vaapi\nasubboostfirequalizerpixdesctesttreble\natadenoiseflangerpixscopetremolo\natempoflitepptrim\natrimfloodfillpp7unpremultiply\navectorscopeformatpremultiplyunsharp\navgblurfpsprewittunsharp_opencl\navgblur_openclframepackprewitt_opencluspp\navgblur_vulkanframerateprocamp_vaapiv360\naxcorrelateframestepprogram_openclvaguedenoiser\nazmqfreezedetectpseudocolorvectorscope\nbandpassfreezeframespsnrvflip\nbandrejectfrei0rpullupvfrdet\nbassfrei0r_srcqpvibrance\nbboxfspprandomvibrato\nbenchgblurreadeia608vidstabdetect\nbilateralgeqreadvitcvidstabtransform\nbiquadgradfunrealtimevignette\nbitplanenoisegraphmonitorremapvmafmotion\nblackdetectgreyedgeremovegrainvolume\nblackframehaasremovelogovolumedetect\nblendhaldclutrepeatfieldsvpp_qsv\nbm3dhaldclutsrcreplaygainvstack\nboxblurhdcdresamplew3fdif\nboxblur_openclheadphonereversewaveform\nbs2bhfliprgbashiftweave\nbwdifhighpassrgbtestsrcxbr\ncashighshelfrobertsxfade\ncellautohilbertroberts_openclxfade_opencl\nchannelmaphisteqrotatexmedian\nchannelsplithistogramrubberbandxstack\nchorushqdn3dsabyadif\nchromaber_vulkanhqxscaleyadif_cuda\nchromaholdhstackscale2refyaepblur\nchromakeyhuescale_cudayuvtestsrc\nchromashifthwdownloadscale_nppzmq\nciescopehwmapscale_qsvzoompan\ncodecviewhwuploadscale_vaapizscale\ncolorhwupload_cudascale_vulkan\ncolorbalancehysteresisscroll\ncolorchannelmixeridetselect\n
接下我们可以尝试输入:./configure–list-muxers查看FFmpeg的封装,封装Muxing是指将压缩后的编码封装到一个容器格式中,我们输入./configure–list-muxers来查看FFmpeg支持哪些容器格式:
从上面打印信息来看,FFmpeg支持生成裸流文件,如H.264,AAC,PCM,也支持一些常见的格式,如MP3,MP4,FLV,M3U8,WEBM等
接下我们可以尝试输入:./configure–list-demuxers查看FFmpeg的解封装。FFmpeg的解封装(Demuxing)是指将读入的容器格式拆解开,将里面的压缩的音频流,视频流,字幕流,数据流等提取出来。
aafilmstriploasrsd\naacfitslrcrso\nac3flaclvfrtp\nacmfliclxfrtsp\nactflvm4vs337m\nadffourxmmatroskasami\nadpfrmmgstssap\nadsfsbmicrodvdsbc\nadxfwsemjpegsbg\naeag722mjpeg_2000scc\nafcg723_1mlpsdp\naiffg726mlvsdr2\naixg726lemmsds\nalpg729mmfsdx\namrgdvmovsegafilm\namrnbgenhmp3ser\namrwbgifmpcshorten\nanmgsmmpc8siff\napcgxfmpegpssln\napeh261mpegtssmacker\napmh263mpegtsrawsmjpeg\napngh264mpegvideosmush\naptxhcampjpegsol\naptx_hdhcommpl2sox\naqtitlehevcmpsubspdif\nargo_asfhlsmsfsrt\nasfhnmmsnwc_tcpstl\nasf_oicomtafstr\nassidcinmtvsubviewer\nastidfmusxsubviewer1\nauiffmvsup\nav1ifvmvisvag\naviilbcmxfswf\navisynthimage2mxgtak\navrimage2_alias_pixnctedcaptions\navsimage2_brender_pixnistspherethp\navs2image2pipenspthreedostr\nbethsoftvidimage_bmp_pipensvtiertexseq\nbfiimage_dds_pipenuttmv\nbfstmimage_dpx_pipenuvtruehd\nbinkimage_exr_pipeoggtta\nbintextimage_gif_pipeomatty\nbitimage_j2k_pipepaftxd\nbmvimage_jpeg_pipepcm_alawty\nboaimage_jpegls_pipepcm_f32bev210\nbrstmimage_pam_pipepcm_f32lev210x\nc93image_pbm_pipepcm_f64bevag\ncafimage_pcx_pipepcm_f64levapoursynth\ncavsvideoimage_pgm_pipepcm_mulawvc1\ncdgimage_pgmyuv_pipepcm_s16bevc1t\ncdxlimage_pictor_pipepcm_s16levividas\ncineimage_png_pipepcm_s24bevivo\ncodec2image_ppm_pipepcm_s24levmd\ncodec2rawimage_psd_pipepcm_s32bevobsub\nconcatimage_qdraw_pipepcm_s32levoc\ndashimage_sgi_pipepcm_s8vpk\ndataimage_sunrast_pipepcm_u16bevplayer\ndaudimage_svg_pipepcm_u16levqf\ndcstrimage_tiff_pipepcm_u24bew64\nderfimage_webp_pipepcm_u24lewav\ndfaimage_xpm_pipepcm_u32bewc3\ndhavimage_xwd_pipepcm_u32lewebm_dash_manifest\ndiracingenientpcm_u8webvtt\ndnxhdipmoviepcm_vidcwsaud\ndsfircampjswsd\ndsicinisspmpwsvqa\ndssiv8pp_bnkwtv\ndtsivfpvawv\ndtshdivrpvfwve\ndvjacosubqcpxa\ndvbsubjvr3dxbin\ndvbtxtkuxrawvideoxmv\ndxakvagrealtextxvag\nealibgmeredsparkxwma\nea_cdatalibmodplugrl2yop\neac3libopenmptrmyuv4mpegpipe\nepaflive_flvroq\nffmetadatalmlm4rpl
从上面解封装又称为解复用格式的支持信息中可以看到,FFmpeg支持的demuxter非常多,包含图片image,MP3,FLV,MP4,MOV,AVI等
接下我们可以尝试输入:./configure–list-protocols查看FFmpeg的流媒体协议。(FFmpeg不仅仅支持本地的多媒体处理,而且还支持网络流媒体的处理):
从支持的协议列表中可以看到,FFmpeg支持的流媒体协议比较多,包括MMS,HTTP,HTTPS,HLS,RTMP,RTP,甚至支持TCP,UDP,其也支持使用file协议的本地文件操作和使用concat协议支持的多个文件串流操作。
接下我们可以尝试输入:./configure–list-hwaccels查看FFmpeg支持的硬件加速器
接下我们可以尝试输入:./configure–list-parsers查看FFmpeg支持的解析器
接下我们可以尝试输入:./configure–list-bsfs查看FFmpeg支持的字节流过滤器
接下我们可以尝试输入:./configure–list-indevs查看有效的输入设备
接下我们可以尝试输入:./configure–list-outdevs查看有效的输出设备
参考书籍:FFmpeg从入门到精通音视频开发进阶指南:基于Android与iOS平台的实践
原文FFmpeg学习(1)开篇-掘金
文章分享结束,教育实践专题网站源码分享和教育实践项目的答案你都知道了吗?欢迎再次光临本站哦!
