from: http://blog.csdn.net/leixiaohua1020/article/details/42658139#

作者:雷霄骅, 一个值得怀念的人

本文汇总一下自己视音频编解码学习方面的开源项目。这些开源项目大体上可以分成专业领域程序,FFmpeg示例程序,FFmpeg移植程序,多媒体项目示例程序,视音频编解码原理学习工程几个类别。这些类别的详细含义如下所列。

  • 专业领域程序:一些有专业性质的程序。
  • FFmpeg示例程序:FFmpeg的类库的各种示例程序。
  • FFmpeg移植程序:FFmpeg项目中移植到Windows的VC平台下的程序。
  • 多媒体项目示例程序:除了FFmpeg之外其他多媒体项目的示例程序。
  • 视音频编解码学习工程:用于学习视音频编解码原理的示例程序。

下面按照类别分别记录每个项目。每个程序的介绍分成“简介”,“文章”,“项目主页”三个部分:

  • “简介”使用几句简短的话介绍开源项目。
  • “文章”则是我自己写的有关该项目的文章。
  • “项目主页”则是该项目的主页地址。

此前一直以SourceForge作为各个项目的主页地址。后来受到不少人的建议,将代码在Github上也保存了一份;国内的开源中国的代码托管做的也不错,因此也在开源中国上保存了一份代码。此外,在SourceForge上做了一个简单的Wiki,在Github上做了一个简单的Blog,方便对这两个网站上的项目进行查找和访问。上述三个网站上的项目列表可以通过下列地址访问。

  • 我的SourceForge主页:https://sourceforge.net/u/leixiaohua1020/wiki/
  • 我的Github主页:http://leixiaohua1020.github.com/
  • 我的开源中国主页:http://git.oschina.net/leixiaohua1020

1. 专业领域程序

专业领域程序指的是主要应用于科学实验方面的程序。这类程序并不是视音频技术开发必须的,主要用于研究工作。

1.1 VideoEye

简介

VideoEye是一个开源的实时视频分析的软件。本软件可以播放和分析视频数据。它支持多种视频流输入方式:HTTP,RTMP,RTSP以及文件等等。该软件可以实时分析视频流并能以图形化的方式呈现其分析结果。

文章

《开源实时视频码流分析软件:VideoEye》

项目主页

SourceForge:https://sourceforge.net/projects/videoeye/

Github:https://github.com/leixiaohua1020/VideoEye

开源中国:http://git.oschina.net/leixiaohua1020/VideoEye

1.2 TIandSI

简介

本工具用于计算视频的时间信息(TI,也称为时间复杂度),以及空间信息(SI,也称为空间复杂度),以上两个指标取自于ITU-R BT.1788标准。

文章

《视频特性TI(时间信息)和SI(空间信息)的计算工具:TIandSI》

《视频特性TI(时间信息)和SI(空间信息)的计算工具:TIandSI-压缩码流版》

项目主页

SourceForge:https://sourceforge.net/projects/tiandsi/

Github:https://github.com/leixiaohua1020/TIandSI

开源中国:http://git.oschina.net/leixiaohua1020/TIandSI

2. FFmpeg示例程序

FFmpeg示例程序是我做的最多的一类程序。这些示例程序展示了利用FFmpeg的类库进行视音频程序开发的方法,比较适合新手学习FFmpeg。目前这些示例程序已经覆盖了从流媒体接收,解封装,解码,像素转换,编码,封装,流媒体发送所有这些流程。

FFmpeg示例程序在视频处理的流程中的位置如下图所示。

单击查看更清晰的图片

图中显示了一个完整的视频处理流程。按照蓝色箭头指向的顺序,从外部协议接收下来的数据依次经过解协议,解封装,解码,像素转换,编码,封装,发送这几个步骤。这些步骤按照处理数据类型的不同,可以分成几个层次:

  • 协议层(Protocol Layer):该层处理的数据为符合特定流媒体协议规范的数据,例如http,rtmp,file等。
  • 封装层(Format Layer):该层处理的数据为符合特定封装格式规范的数据,例如mkv,mp4,flv,mpegts,avi等。
  • 编码层(Codec Layer):该层处理的数据为符合特定编码标准规范的数据,例如h264,h265,mpeg2,mpeg4等。
  • 像素层(Pixel Layer):该层处理的数据为符合特定像素格式规范的数据,例如yuv420p,yuv422p,yuv444p,rgb24等。

下面我们上述几个层次对FFmpeg示例程序进行归类。

协议层处理包含以下项目:

  • simplest ffmpeg device:使用FFmpeg读取设备中的媒体数据。
  • simplest ffmpeg mem handler:使用FFmpeg读取内存中的数据。
  • simplest ffmpeg streamer:使用FFmpeg发送流媒体数据。

封装层处理包含以下项目:

  • simplest ffmpeg format:使用FFmpeg分离音视频(demux),封装音视频(mux),转换封装格式(remux)。

编码层处理包含以下项目:

  • simplest ffmpeg player:使用FFmpeg解码播放视频数据。
  • simplest ffmpeg audio player:使用FFmpeg解码播放音频数据。
  • simplest ffmpeg video encoder:使用FFmpeg编码视频数据。
  • simplest ffmpeg audio encoder:使用FFmpeg编码音频数据。
  • simplest ffmpeg picture encoder:使用FFmpeg编码图片。

像素层处理包含以下项目:

  • simplest ffmpeg swscale:使用FFmpeg转换像素格式。
  • simplest ffmpeg video filter:使用FFmpeg给视频添加滤镜效果。

《FFmpeg示例程序合集》可以通过Git批量获取:

FFmpeg示例程序合集-Git批量获取脚本

《FFmpeg示例程序合集》也可以在VC++/CL.exe/MinGW/Linux GCC/Mac OS等多个平台上编译通过:

FFmpeg示例程序合集-批量编译脚本

下面逐一列出这些项目的信息。

2.1 Simplest ffmpeg player

最简单的基于FFMPEG的视频播放器

简介

本程序实现了视频文件的解码和显示。是最简单的FFmpeg视频解码方面的教程。通过学习本例子可以了解FFmpeg的解码流程。

项目包含6个工程:

simplest_ffmpeg_player:标准版,FFmpeg学习的开始。

simplest_ffmpeg_player_su:SU(SDL Update)版,加入了简单的SDL的Event。

simplest_ffmpeg_decoder:一个包含了封装格式处理功能的解码器。使用了libavcodec和libavformat。

simplest_ffmpeg_decoder_pure:一个纯净的解码器。只使用libavcodec(没有使用libavformat)。

simplest_video_play_sdl2:使用SDL2播放YUV的例子。

simplest_ffmpeg_helloworld:输出FFmpeg类库的信息。

文章

《100行代码实现最简单的基于FFMPEG+SDL的视频播放器(SDL1.x)》

《最简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0)》

《最简单的基于FFmpeg的解码器-纯净版(不包含libavformat)》

《最简单的基于FFMPEG+SDL的视频播放器:拆分-解码器和播放器》

《最简单的基于FFMPEG的Helloworld程序》

项目主页

SourceForge:https://sourceforge.net/projects/simplestffmpegplayer/

Github:https://github.com/leixiaohua1020/simplest_ffmpeg_player

开源中国:http://git.oschina.net/leixiaohua1020/simplest_ffmpeg_player

2.2 simplest ffmpeg audio player

最简单的基于FFMPEG的音频播放器

简介

本程序实现了音频的解码和播放。是最简单的FFmpeg音频解码方面的教程。通过学习本例子可以了解FFmpeg的解码流程。

项目包含3个工程:

simplest_ffmpeg_audio_player:基于FFmpeg+SDL的音频解码器

simplest_ffmpeg_audio_decoder:音频解码器。使用了libavcodec和libavformat。

simplest_audio_play_sdl2:使用SDL2播放PCM采样数据的例子。

文章

《最简单的基于FFMPEG+SDL的音频播放器》

《最简单的基于FFMPEG+SDL的音频播放器 ver2 (采用SDL2.0)》

《最简单的基于FFMPEG+SDL的音频播放器:拆分-解码器和播放器》

项目主页

SourceForge:https://sourceforge.net/projects/simplestffmpegaudioplayer/

Github:https://github.com/leixiaohua1020/simplest_ffmpeg_audio_player

开源中国:http://git.oschina.net/leixiaohua1020/simplest_ffmpeg_audio_player

2.3 simplest ffmpeg picture encoder

最简单的基于FFMPEG的图像编码器

简介

本程序实现了YUV420P像素数据编码为JPEG图片。是最简单的FFmpeg编码方面的教程。通过学习本例子可以了解FFmpeg的编码流程。

文章

《最简单的基于FFMPEG的图像编码器(YUV编码为JPEG)》

项目主页

SourceForge:https://sourceforge.net/projects/simplestffmpegpictureencoder/

Github:https://github.com/leixiaohua1020/simplest_ffmpeg_picture_encoder

开源中国:http://git.oschina.net/leixiaohua1020/simplest_ffmpeg_picture_encoder

2.4 simplest ffmpeg video encoder

最简单的基于FFMPEG的视频编码器

简介

本程序实现了YUV像素数据编码为视频码流(H.265,H264,MPEG2,VP8等等)。是最简单的FFmpeg视频编码方面的教程。通过学习本例子可以了解FFmpeg的编码流程。

它包含以下两个子项目:

simplest_ffmpeg_video_encoder:普通版编码器。使用libavcodec和libavformat编码并且封装视频。

simplest_ffmpeg_video_encoder_pure:纯净版编码器。仅使用libavcodec编码视频,不使用libavformat。

文章

《最简单的基于FFMPEG的视频编码器(YUV编码为H.264)》

《最简单的基于FFmpeg的视频编码器-更新版(YUV编码为HEVC(H.265))》

《最简单的基于FFmpeg的编码器-纯净版(不包含libavformat)》

项目主页

SourceForge:https://sourceforge.net/projects/simplestffmpegvideoencoder/

Github:https://github.com/leixiaohua1020/simplest_ffmpeg_video_encoder

开源中国:http://git.oschina.net/leixiaohua1020/simplest_ffmpeg_video_encoder

2.5 simplest ffmpeg audio encoder

最简单的基于FFMPEG的音频编码器

简介

本程序实现了音频PCM采样数据编码为压缩码流(MP3,WMA,AAC等)。是最简单的FFmpeg音频编码方面的教程。通过学习本例子可以了解FFmpeg的编码流程。

文章

《最简单的基于FFMPEG的音频编码器(PCM编码为AAC)》

项目主页

SourceForge:https://sourceforge.net/projects/simplestffmpegaudioencoder/

Github:https://github.com/leixiaohua1020/simplest_ffmpeg_audio_encoder

开源中国:http://git.oschina.net/leixiaohua1020/simplest_ffmpeg_audio_encoder

2.6 simplest ffmpeg format

最简单的基于FFMPEG的封装格式处理

简介

该解决方案包含了使用FFmpeg进行封装格式处理的各种例子:

simplest_ffmpeg_demuxer:视音频分离器。

simplest_ffmpeg_demuxer_simple:视音频分离器(简化版)。

simplest_ffmpeg_muxer:视音频复用器。

simplest_ffmpeg_remuxer:封装格式转换器。

文章

《最简单的基于FFmpeg的封装格式处理:视音频分离器简化版(demuxer-simple)》

《最简单的基于FFmpeg的封装格式处理:视音频分离器(demuxer)》

《最简单的基于FFmpeg的封装格式处理:视音频复用器(muxer)》

《最简单的基于FFMPEG的封装格式处理:封装格式转换(remuxer)》

项目主页

SourceForge:https://sourceforge.net/projects/simplestffmpegformat/

Github:https://github.com/leixiaohua1020/simplest_ffmpeg_format

开源中国:http://git.oschina.net/leixiaohua1020/simplest_ffmpeg_format

2.7 simplest ffmpeg streamer

最简单的基于FFmpeg的推流器(推送RTMP)

简介

本例子实现了推送本地视频至流媒体服务器(以RTMP为例)。是使用FFmpeg进行流媒体推送最简单的教程。

文章

《最简单的基于FFmpeg的推流器(以推送RTMP为例)》

《最简单的基于FFMPEG的推流器附件:收流器》

项目主页

SourceForge:https://sourceforge.net/projects/simplestffmpegstreamer/

Github:https://github.com/leixiaohua1020/simplest_ffmpeg_streamer

开源中国:http://git.oschina.net/leixiaohua1020/simplest_ffmpeg_streamer

2.8 simplest ffmpeg video filter

最简单的基于FFmpeg的AVfilter例子(水印叠加)

简介

本程序使用包含下面两个项目:
simplest_ffmpeg_video_filter:可以将一张PNG图片作为水印叠加到视频上,结合使用了libavfilter,libavcodec等类库。
simplest_ffmpeg_video_filter_pure:可以给YUV像素数据加特效,只用了libavfilter库。

文章

《最简单的基于FFmpeg的AVfilter例子(水印叠加)》

《最简单的基于FFmpeg的AVfilter的例子-纯净版》

项目主页

SourceForge:https://sourceforge.net/projects/simplestffmpegvideofilter/

Github:https://github.com/leixiaohua1020/simplest_ffmpeg_video_filter

开源中国:http://git.oschina.net/leixiaohua1020/simplest_ffmpeg_video_filter

2.9 simplest ffmpeg swscale

最简单的基于FFmpeg的libswscale的示例

简介

本程序是最简单的基于FFmpeg的libswscale进行像素处理的示例。它包含了两个工程:

simplest_ffmpeg_swscale: 最简单的libswscale的教程。

simplest_pic_gen: 生成各种测试图片的工具。

文章

《最简单的基于FFmpeg的libswscale的示例(YUV转RGB)》

《最简单的基于FFmpeg的libswscale的示例附件:测试图片生成工具》

项目主页

SourceForge:https://sourceforge.net/projects/simplestffmpegswscale/

Github:https://github.com/leixiaohua1020/simplest_ffmpeg_swscale

开源中国:http://git.oschina.net/leixiaohua1020/simplest_ffmpeg_swscale

2.10 simplest ffmpeg device

最简单的基于FFmpeg的AVDevice例子

简介

本工程包含两个基于FFmpeg的libavdevice的例子:

simplest_ffmpeg_grabdesktop:屏幕录制。

simplest_ffmpeg_readcamera:读取摄像头。

文章

《最简单的基于FFmpeg的AVDevice例子(屏幕录制)》

《最简单的基于FFmpeg的AVDevice例子(读取摄像头)》

项目主页

SourceForge:https://sourceforge.net/projects/simplestffmpegdevice/

Github:https://github.com/leixiaohua1020/simplest_ffmpeg_device

开源中国:http://git.oschina.net/leixiaohua1020/simplest_ffmpeg_device

2.11 simplest ffmpeg mem handler

最简单的基于FFmpeg的内存读写例子

简介

本程序实现了对内存中的视频数据的读写。包含两个工程:

simplest_ffmpeg_mem_player:播放内存中视频数据的播放器。

simplest_ffmpeg_mem_transcoder:转码内存中数据的转码器。

文章

《最简单的基于FFmpeg的内存读写的例子:内存播放器》

《最简单的基于FFmpeg的内存读写的例子:内存转码器》

项目主页

SourceForge:https://sourceforge.net/projects/simplestffmpegmemhandler/

Github:https://github.com/leixiaohua1020/simplest_ffmpeg_mem_handler

开源中国:http://git.oschina.net/leixiaohua1020/simplest_ffmpeg_mem_handler

2.12 simplest ffmpeg avutil

最简单的基于FFmpeg的AVUtil例子 (AVLog, AVOption等)

简介

本程序是FFmpeg中的libavutil的示例,目前包含:

AVLog
AVOption (AVClass)

AVDictionary

ParseUtil

文章

《最简单的基于FFmpeg的AVUtil例子 (AVLog, AVOption等)》

项目主页

SourceForge:https://sourceforge.net/projects/simplestffmpegavutil/

Github:https://github.com/leixiaohua1020/simplest_ffmpeg_avutil

开源中国:http://git.oschina.net/leixiaohua1020/simplest_ffmpeg_avutil

2.12 simplest ffmpeg mobile

最简单的基于FFmpeg的移动端的例子

简介

本解决方案包含了使用FFmpeg在移动端处理多媒体的各种例子:

[Android]
simplest_android_player: 基于安卓接口的视频播放器
simplest_ffmpeg_android_helloworld: 安卓平台下基于FFmpeg的HelloWorld程序
simplest_ffmpeg_android_decoder: 安卓平台下最简单的基于FFmpeg的视频解码器
simplest_ffmpeg_android_decoder_onelib: 安卓平台下最简单的基于FFmpeg的视频解码器-单库版
simplest_ffmpeg_android_streamer: 安卓平台下最简单的基于FFmpeg的推流器
simplest_ffmpeg_android_transcoder: 安卓平台下移植的FFmpeg命令行工具
simplest_sdl_android_helloworld: 移植SDL到安卓平台的最简单程序
[IOS]
simplest_ios_player: 基于IOS接口的视频播放器
simplest_ffmpeg_ios_helloworld: IOS平台下基于FFmpeg的HelloWorld程序
simplest_ffmpeg_ios_decoder: IOS平台下最简单的基于FFmpeg的视频解码器
simplest_ffmpeg_ios_streamer: IOS平台下最简单的基于FFmpeg的推流器
simplest_ffmpeg_ios_transcoder: IOS平台下移植的ffmpeg.c命令行工具
simplest_sdl_ios_helloworld: 移植SDL到IOS平台的最简单程序
[Windows]

simplest_ffmpeg_windowsphone_helloworld: Windows Phone平台下基于FFmpeg的HelloWorld程序

文章

最简单的基于FFmpeg的移动端例子:Android HelloWorld

最简单的基于FFmpeg的移动端例子:Android 视频解码器

最简单的基于FFmpeg的移动端例子:Android 视频解码器-单个库版

最简单的基于FFmpeg的移动端例子:Android 推流器

最简单的基于FFmpeg的移动端例子:Android 视频转码器

最简单的基于FFmpeg的移动端例子附件:Android 自带播放器

最简单的基于FFmpeg的移动端例子附件:SDL Android HelloWorld

最简单的基于FFmpeg的移动端例子:IOS HelloWorld

最简单的基于FFmpeg的移动端例子:IOS 视频解码器

最简单的基于FFmpeg的移动端例子:IOS 推流器

最简单的基于FFmpeg的移动端例子:IOS 视频转码器

最简单的基于FFmpeg的移动端例子附件:IOS自带播放器

最简单的基于FFmpeg的移动端例子:Windows Phone HelloWorld

项目主页

Github:https://github.com/leixiaohua1020/simplest_ffmpeg_mobile

开源中国:https://git.oschina.net/leixiaohua1020/simplest_ffmpeg_mobile

3. FFmpeg移植程序

FFmpeg移植程序是将FFmpeg项目中的命令行工具“ffplay”和“ffmpeg”的源代码(ffplay.c和ffmpeg.c)移植到VC下后编写的程序。移植后的程序保留了原本命令行工具的大部分功能,并且使用MFC做了一套界面,使用起来相对方便一些。其实相比与实际应用来说,这两个工程更加适合作为学习材料。可以通过它们研究播放器,转码器的原理。

3.1 FFPLAY for MFC

简介

本工程将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下。并且使用MFC做了一套简单的界面。

文章

《ffplay播放器移植VC的工程:ffplay for MFC》

项目主页

SourceForge:https://sourceforge.net/projects/ffplayformfc/

Github:https://github.com/leixiaohua1020/ffplaymfc

开源中国:http://git.oschina.net/leixiaohua1020/ffplay-for-MFC

3.2 FFMPEG for MFC

简介

本工程将ffmpeg工程中的ffmpeg转码器(ffmpeg.c)移植到了VC环境下。并且使用MFC做了一套简单的界面。

文章

《ffmpeg转码器移植VC的工程:ffmpeg for MFC》

项目主页

SourceForge:https://sourceforge.net/projects/ffmpegformfc/

Github:https://github.com/leixiaohua1020/ffmpegmfc

开源中国:http://git.oschina.net/leixiaohua1020/ffmpeg-for-MFC

4. 多媒体项目示例程序

除了做了基于FFmpeg的多媒体程序之外,还做了一些基于其他多媒体项目的示例。如下文所列。

4.1 simplest media play

最简单的视音频播放示例

简介

本工程包含了使用各种API(Direct3D,OpenGL,GDI,DirectSound,SDL2)播放多媒体例子。其中音频输入为PCM采样数据。输出至系统的声卡播放出来。视频输入为YUV/RGB像素数据。输出至显示器上的一个窗口播放出来。

通过本工程的代码初学者可以快速学习使用这几个API播放视频和音频的技术。一共包括了如下几个子工程:

simplest_audio_play_directsound:使用DirectSound播放PCM音频采样数据。
simplest_audio_play_sdl2:使用SDL2播放PCM音频采样数据。
simplest_video_play_direct3d:使用Direct3D的Surface播放RGB/YUV视频像素数据。
simplest_video_play_direct3d_texture:使用Direct3D的Texture播放RGB视频像素数据。
simplest_video_play_gdi:使用GDI播放RGB/YUV视频像素数据。
simplest_video_play_opengl:使用OpenGL播放RGB/YUV视频像素数据。
simplest_video_play_opengl_texture:使用OpenGL的Texture播放YUV视频像素数据。

simplest_video_play_sdl2:使用SDL2播放RGB/YUV视频像素数据。

                    
          

文章

《最简单的视音频播放示例1:总述》

《最简单的视音频播放示例2:GDI播放YUV, RGB》

《最简单的视音频播放示例3:Direct3D播放YUV,RGB(通过Surface)》

《最简单的视音频播放示例4:Direct3D播放RGB(通过Texture)》

《最简单的视音频播放示例5:OpenGL播放RGB/YUV》

《最简单的视音频播放示例6:OpenGL播放YUV420P(通过Texture,使用Shader)》

《最简单的视音频播放示例7:SDL2播放RGB/YUV》

《最简单的视音频播放示例8:DirectSound播放PCM》

《最简单的视音频播放示例9:SDL2播放PCM》

项目主页

SourceForge:https://sourceforge.net/projects/simplestmediaplay/

Github:https://github.com/leixiaohua1020/simplest_media_play

开源中国:http://git.oschina.net/leixiaohua1020/simplest_media_play

4.2 simplest encoder

最简单的编码器例子

简介

该解决方案包含了几个常见的编码器的使用示例:

simplest_vpx_encoder:最简单的基于libvpx的视频编码器

simplest_x264_encoder:最简单的基于libx264的视频编码器

simplest_x265_encoder:最简单的基于libx265的视频编码器

              

文章

《最简单的视频编码器:编译(libx264,libx265,libvpx)》

《最简单的视频编码器:基于libx264(编码YUV为H.264)》

《最简单的视频编码器:基于libx265(编码YUV为H.265)》

《最简单的视频编码器:基于libvpx(编码YUV为VP8)》

项目主页

SourceForge:https://sourceforge.net/projects/simplestencoder/

Github:https://github.com/leixiaohua1020/simplest_encoder

开源中国:http://git.oschina.net/leixiaohua1020/simplest_encoder

4.3 simplest libRTMP example

最简单的基于librtmp的示例

简介

本工程包含了LibRTMP的使用示例,包含如下子工程:

simplest_librtmp_receive: 接收RTMP流媒体并在本地保存成FLV格式的文件。
simplest_librtmp_send_flv: 将FLV格式的视音频文件使用RTMP推送至RTMP流媒体服务器。

simplest_librtmp_send264: 将内存中的H.264数据推送至RTMP流媒体服务器。

文章

《最简单的基于librtmp的示例:接收(RTMP保存为FLV)》

《最简单的基于librtmp的示例:发布(FLV通过RTMP发布)》

《最简单的基于librtmp的示例:发布H.264(H.264通过RTMP发布)》

项目主页

SourceForge:https://sourceforge.net/projects/simplestlibrtmpexample/

Github:https://github.com/leixiaohua1020/simplest_librtmp_example

开源中国: http://git.oschina.net/leixiaohua1020/simplest_librtmp_example

4.4 simplest libVLC example

最简单的基于libVLC的例子

简介

本工程是包含了一些基于libVLC的示例程序。一共包含了如下几个子程序。

playerGUI: 最简单的基于libVLC的播放器-图形界面版。
simplest_libvlc_example: 最简单的基于libVLC的播放器。
simplest_libvlc_streamer: 最简单的基于libVLC的推流器。

文章

《最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器》

《最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器(图形界面版)》

《最简单的基于libVLC的例子:最简单的基于libVLC的推流器》

项目主页

SourceForge:https://sourceforge.net/projects/simplestlibvlcexample/

Github:https://github.com/leixiaohua1020/simplest_libvlc_example

开源中国:http://git.oschina.net/leixiaohua1020/simplest_libvlc_example

4.5 simplest directshow example

最简单的基于DirectShow的示例

简介

本程序包含了DirectShow开发的示例程序。适合DirectShow初学者进行学习。
它包含了以下几个子程序:

simplest_directshow_player: 最简单的基于DirectShow的视频播放器。
simplest_directshow_player_custom: 最简单的基于DirectShow的视频播放器(Custom)。
playerGUI: 最简单的基于DirectShow的播放器-图形界面版。
simplest_directshow_info: 最简单的Directshow信息显示例子。
simplest_directshow_filter: 目前还未完成。

文章

《最简单的基于DirectShow的示例:视频播放器》

《最简单的基于DirectShow的示例:视频播放器图形界面版》

《最简单的基于DirectShow的示例:视频播放器自定义版》

《最简单的基于DirectShow的示例:获取Filter信息》

项目主页

SourceForge:https://sourceforge.net/projects/simplestdirectshowexample/

Github:https://github.com/leixiaohua1020/simplest_directshow_example

开源中国:http://git.oschina.net/leixiaohua1020/simplest_directshow_example

5. 视音频编解码学习工程

视音频编解码学习工程主要用于学习编解码的原理。这几个工程都是简单的“码流分析”工具。他们可以分析不同格式的多媒体数据:TS封装格式,FLV封装格式,H.264码流,AAC码流,JPEG压缩图片。

这几个程序我完成的比较早,是我在学习视音频技术初期边看理论边实践着做出来的。因此功能上还有一些不足,一直也没有时间修正,有时间再把它们统一更新一下。

5.1 H264 Stream Analysis

H.264分析器

文章

《视音频编解码学习工程:H.264分析器》

项目主页

SourceForge:https://sourceforge.net/projects/h264streamanalysis/

Github:https://github.com/leixiaohua1020/h264_analysis

开源中国:http://git.oschina.net/leixiaohua1020/H264_Analysis

5.2 AAC Stream Analysis

AAC格式分析器

文章

《视音频编解码学习工程:AAC格式分析器》

项目主页

SourceForge: https://sourceforge.net/projects/aacstreamanalysis/

5.3 FLV Format Analysis

FLV封装格式分析器

文章

《视音频编解码学习工程:FLV封装格式分析器》

项目主页

SourceForge:https://sourceforge.net/projects/flvformatanalysis/

5.4 TS Format Analysis

TS封装格式分析器

文章

《视音频编解码学习工程:TS封装格式分析器》

项目主页

SourceForge: https://sourceforge.net/projects/tsformatanalysis/

5.5 JPEG Analysis

JPEG分析器

文章

《视音频编解码学习工程:JPEG分析器》

项目主页

SourceForge: https://sourceforge.net/projects/jpeganalysis/

6. 其他语言工程

一些不是使用C/C++写的流媒体相关的工程。

6.1 Simplest Video Website

最简单的视频网站(JavaEE+FFmpeg)

简介

本程序是一个最简单的视频网站系统。基于JavaEE的SSH (Strut2 + Spring + Hibernate)和FFmpeg。

文章
《最简单的视频网站(JavaEE+FFmpeg)》
项目主页
开源中国:http://git.oschina.net/leixiaohua1020/simplest_video_website

Github:https://github.com/leixiaohua1020/simplest_video_website

在线演示:http://www.velab.com.cn:8080/svw/

6.2 Simplest flashmedia example

 最简单的基于Flash的流媒体示例

简介

本程序是一个Flash流媒体示例的合集。其中包含了使用Actionscript编写的推流器和播放器,以及网页播放器。本工程包含如下基于Flash技术的流媒体的例子:

simplest_as3_rtmp_player:  最简单的RTMP播放器(基于ActionScript)
simplest_as3_rtmp_streamer:最简单的RTMP推流器(基于ActionScript)
rtmp_sample_player_adobe: 从Adobe Flash Media Sever提取出来的测试播放器
rtmp_sample_player_wowza: 从Wowza服务器中提取出来的测试播放器
rtmp_sample_player_flowplayer: 基于FlowPlayer的RTMP/HTTP播放器(添加RTMP plugin)
rtmp_sample_player_videojs: 基于VideoJS的RTMP/HTTP播放器
rtmp_sample_player_jwplayer: 基于JWplayer的RTMP/HTTP播放器
hls_sample_player_flowplayer: 基于FlowPlayer的HLS播放器(添加HLS plugin)
hls_video_player_html5: 基于HTML5的HLS/HTTP播放器

activex_vlc_player:  基于VLC的ActiveX控件的播放器

文章
《最简单的基于Flash的流媒体示例:RTMP推送和接收(ActionScript)》

《最简单的基于Flash的流媒体示例:网页播放器(HTTP,RTMP,HLS)》

项目主页
SourceForge:https://sourceforge.net/projects/simplestflashmediaexample/
Github:https://github.com/leixiaohua1020/simplest_flashmedia_example
开源中国:http://git.oschina.net/leixiaohua1020/simplest_flashmedia_example

7. 附录:程序汇总表

1. 专业领域程序

1.1 VideoEye
1.2 TIandSI

2. FFmpeg示例程序

2.1 Simplest ffmpeg player | 最简单的基于FFMPEG的视频播放器

包括了如下几个子工程:

simplest_ffmpeg_player:标准版,FFmpeg学习的开始。

simplest_ffmpeg_player_su:SU(SDL Update)版,加入了简单的SDL的Event。

simplest_ffmpeg_decoder_pure:一个纯净的解码器只使用libavcodec(没有使用libavformat)。

2.2 simplest ffmpeg audio player | 最简单的基于FFMPEG的音频播放器
2.3 simplest ffmpeg picture encoder | 最简单的基于FFMPEG的图像编码器
2.4 simplest ffmpeg video encoder | 最简单的基于FFMPEG的视频编码器

包括了如下几个子工程:

simplest_ffmpeg_video_encoder:普通版编码器。使用libavcodec和libavformat编码并且封装视频。

simplest_ffmpeg_video_encoder_pure:纯净版编码器。仅使用libavcodec编码视频,不使用libavformat。

2.5 simplest ffmpeg audio encoder | 最简单的基于FFMPEG的音频编码器
2.6 simplest ffmpeg format | 最简单的基于FFMPEG的封装格式处理

包括了如下几个子工程:

simplest_ffmpeg_demuxer:视音频分离器。

simplest_ffmpeg_demuxer_simple:视音频分离器(简化版)。

simplest_ffmpeg_muxer:视音频复用器。

simplest_ffmpeg_remuxer:封装格式转换器。

2.7 simplest ffmpeg streamer | 最简单的基于FFmpeg的推流器(推送RTMP)
2.8 simplest ffmpeg video filter | 最简单的基于FFmpeg的AVfilter例子(水印叠加)
2.9 simplest ffmpeg swscale | 最简单的基于FFmpeg的libswscale的示例

包括了如下几个子工程:

simplest_ffmpeg_swscale: 最简单的libswscale的教程。

simplest_pic_gen: 生成各种测试图片的工具。

2.10 simplest ffmpeg device | 最简单的基于FFmpeg的AVDevice例子

包括了如下几个子工程:

simplest_ffmpeg_grabdesktop:屏幕录制。

simplest_ffmpeg_readcamera:读取摄像头。

2.11 simplest ffmpeg mem handler | 最简单的基于FFmpeg的内存读写例子

包括了如下几个子工程:

simplest_ffmpeg_mem_player:播放内存中视频数据的播放器。

simplest_ffmpeg_mem_transcoder:转码内存中数据的转码器。

2.12 simplest ffmpeg avutil | 最简单的基于FFmpeg的AVUtil例子

2.13 simplest ffmpeg mobile | 最简单的基于FFmpeg的移动端的例子

本解决方案包含了使用FFmpeg在移动端处理多媒体的各种例子:
[Android]
simplest_android_player: 基于安卓接口的视频播放器
simplest_ffmpeg_android_helloworld: 安卓平台下基于FFmpeg的HelloWorld程序
simplest_ffmpeg_android_decoder: 安卓平台下最简单的基于FFmpeg的视频解码器
simplest_ffmpeg_android_decoder_onelib: 安卓平台下最简单的基于FFmpeg的视频解码器-单库版
simplest_ffmpeg_android_streamer: 安卓平台下最简单的基于FFmpeg的推流器
simplest_ffmpeg_android_transcoder: 安卓平台下移植的FFmpeg命令行工具
simplest_sdl_android_helloworld: 移植SDL到安卓平台的最简单程序
[iOS]
simplest_ios_player: 基于IOS接口的视频播放器
simplest_ffmpeg_ios_helloworld: IOS平台下基于FFmpeg的HelloWorld程序
simplest_ffmpeg_ios_decoder: IOS平台下最简单的基于FFmpeg的视频解码器
simplest_ffmpeg_ios_streamer: IOS平台下最简单的基于FFmpeg的推流器
simplest_ffmpeg_ios_transcoder: IOS平台下移植的ffmpeg.c命令行工具
simplest_sdl_ios_helloworld: 移植SDL到IOS平台的最简单程序
[Windows]
simplest_ffmpeg_windowsphone_helloworld: Windows Phone平台下基于FFmpeg的HelloWorld程序

3. FFmpeg移植程序

3.1 FFPLAY for MFC
3.2 FFMPEG for MFC

4. 多媒体项目示例程序

4.1 simplest media play | 最简单的视音频播放示例

包括了如下几个子工程:

simplest_audio_play_directsound:使用DirectSound播放PCM音频采样数据。

simplest_audio_play_sdl2:使用SDL2播放PCM音频采样数据。

simplest_video_play_direct3d:使用Direct3D的Surface播放RGB/YUV视频像素数据。

simplest_video_play_direct3d_texture:使用Direct3D的Texture播放RGB视频像素数据。

simplest_video_play_gdi:使用GDI播放RGB/YUV视频像素数据。

simplest_video_play_opengl:使用OpenGL播放RGB/YUV视频像素数据。

simplest_video_play_opengl_texture:使用OpenGL的Texture播放YUV视频像素数据。

simplest_video_play_sdl2:使用SDL2播放RGB/YUV视频像素数据。

4.2 simplest encoder | 最简单的编码器例子

包括了如下几个子工程:

simplest_vpx_encoder:最简单的基于libvpx的视频编码器

simplest_x264_encoder:最简单的基于libx264的视频编码器

simplest_x265_encoder:最简单的基于libx265的视频编码器

4.3 simplest libRTMP example | 最简单的基于librtmp的示例

包括了如下几个子工程:

simplest_librtmp_receive: 接收RTMP流媒体并在本地保存成FLV格式的文件。

simplest_librtmp_send_flv: 将FLV格式的视音频文件使用RTMP推送至RTMP流媒体服务器。

simplest_librtmp_send264: 将内存中的H.264数据推送至RTMP流媒体服务器。

4.4 simplest libVLC example | 最简单的基于libVLC的例子

包括了如下几个子工程:

playerGUI: 最简单的基于libVLC的播放器-图形界面版。

simplest_libvlc_example: 最简单的基于libVLC的播放器。

simplest_libvlc_streamer: 最简单的基于libVLC的推流器。

4.5 simplest directshow example | 最简单的基于DirectShow的示例

包括了如下几个子工程:

simplest_directshow_player: 最简单的基于DirectShow的视频播放器。

simplest_directshow_player_custom: 最简单的基于DirectShow的视频播放器(Custom)。

playerGUI: 最简单的基于DirectShow的播放器-图形界面版。

simplest_directshow_info: 最简单的Directshow信息显示例子。

simplest_directshow_filter: 目前还未完成。

5.视音频编解码学习工程

5.1 H264 Stream Analysis | H.264分析器
5.2 AAC Stream Analysis | AAC格式分析器
5.3 FLV Format Analysis | FLV封装格式分析器
5.4 TS Format Analysis | TS封装格式分析器
5.5 JPEG Analysis | JPEG分析器

6.其他语言工程

6.1 Simplest Video Website | 最简单的视频网站(JavaEE+FFmpeg)
6.2 Simplest flashmedia example | 最简单的基于Flash的流媒体示例

雷霄骅开源视音频项目汇总相关推荐

  1. 我的开源视音频项目汇总

    本文汇总一下自己视音频编解码学习方面的开源项目.这些开源项目大体上可以分成专业领域程序,FFmpeg示例程序,FFmpeg移植程序,多媒体项目示例程序,视音频编解码原理学习工程几个类别.这些类别的详细 ...

  2. java opencv 轮廓检测,OpenCV 轮廓检测 - 雷霄骅(leixiaohua1020)的个人页面 - OSCHINA - 中文开源技术交流社区...

    使用OpenCV可以对图像的轮廓进行检测.这是之前用过的代码,挺简单的,回顾一下.主要要进行以下2步操作: 1.cvThreshold():对图像进行二值化处理 2.cvFindContours(): ...

  3. 沉痛悼念CSDN博主、年仅26岁的音视频专家雷霄骅

    CSDN的老朋友.连续两届CSDN博客之星.微软MVP.博客排名52位.在中国传媒大学通信与信息系统专业攻读博士的雷霄骅,于2016年7月17日凌晨猝死在学校主楼五层,并于7月23号安葬.据相关报道称 ...

  4. 纪念音视频界前辈-雷霄骅

    这是一篇记录文,纪念一位在音视频领域研究的博士雷霄骅. 雷霄骅生前是中国传媒大学通信与信息系统博士在读生,于2016年7月17日凌晨猝死在学校主楼五层,10月就将迎来自己26岁的生日. 雷霄骅在音视频 ...

  5. 沉痛哀悼雷霄骅博士!

    今天下班后打开QQ群,看到惊人的噩耗,群主雷霄骅博士已于上个月离开了我们!看到新闻报道,我们都怀疑是假新闻.但却不幸是确切的消息.如此大神,如此年经,竟如此不经意地走了!英年早逝,痛心!痛惜! 国内做 ...

  6. 天妒英才,雷霄骅走了。

    昨晚通过业内自媒体才知道雷霄骅去世的消息. 震惊,天妒英才,不夸张的说,如果不知道雷霄骅,可能你音视频还没入门. 在当今音视频编解码封闭技术领域,你专注,勤奋,分享,传播,奉献.在中文音视频技术圈留下 ...

  7. 基于 FFMPEG 的像素格式变换(swscale,致敬雷霄骅)

    基于 FFMPEG 的像素格式变换(swscale,致敬雷霄骅) 前几天写了几篇关于ffmpeg 编程转封装的入门文章,下一步本来是要写转码或者编码的.但是发现无论是转码还是编码,都会遇到图像像素格式 ...

  8. 基于 FFMPEG 的视频编码(libavcodec ,致敬雷霄骅)

    基于 FFMPEG 的视频编码(libavcodec ,致敬雷霄骅) 本文参考了雷博士的博客: 最简单的基于FFmpeg的视频编码器-更新版(YUV编码为HEVC(H.265)) 还参考了另一篇博客: ...

  9. 常用的开源视音频解码软件库

    转:http://hi.baidu.com/jis2007/item/5ab1c6e9a00efee1fb42baf6 windows平台和linux平台下的开源H264编解码器很多,比如ffmepg ...

最新文章

  1. ios视频硬解异常总结,12911总结
  2. 【UML 建模】UML建模语言入门 -- 用例视图详解 用例视图建模实战
  3. python头像变二维码_Python 图像处理库 pillow,提取支付宝和微信支付图片二维码...
  4. 企业开发需要的git提交和拉取代码(本地仓库和github演示)
  5. 要是不会用数据,算什么IT产品经理?
  6. 【API进阶之路】API带来的微创新,打动投资人鼓励我创业
  7. Linux Zero-copy零拷贝技术:源码示例
  8. Java集合框架——概述
  9. linux gpio信号量,执行完? OSIntExit(); 后,再进行任务调度,可是那两个任务都是在等待信号量啊,难道执行完中断函数后会释放一个信号量吗?...
  10. native react 更新机制_React Native 热更新实现(客户端 + 服务器端)
  11. 通过sql server的作业调度+存储过程来实现系统定时任务的方法
  12. hive面试题总结(大数据面试)
  13. 用spss进行数据的标准化处理_用spss怎样对数据进行标准化
  14. 原则与思维模型--《思维模型》2
  15. STL笔记:rb_tree
  16. Echarts实现区级地图
  17. F - 士兵队列训练问题 HDU - 1276
  18. h3c怎么设置虚拟服务器,h3c设置虚拟服务器
  19. 机房运维6大隐患,你中了几个?
  20. halcon学习笔记(一)毛边检测 仿射变换+标准区域登陆检测内外边缘毛边

热门文章

  1. C++中可以以“类名::成员函数”直接引用成员函数哦!
  2. python连接sqlite加密_C#连接加密的Sqlite数据库的方法
  3. iostat 输出解析
  4. mvc大对象json传输报错
  5. SQL老司机,在SQL中计算 array map json数据
  6. Python标准模块—Regular Expressions
  7. iOS应用间相互跳转
  8. spring3 发送邮件和附件
  9. proxool连接池空闲连接中断问题解决
  10. B/S模式下如何使软件屏蔽系统热键