轉個人開源視音頻項目彙總【記念雷神】

本文彙總一下本身視音頻編解碼學習方面的開源項目。這些開源項目大致上能夠分紅專業領域程序,FFmpeg示例程序,FFmpeg移植程序,多媒體項目示例程序,視音頻編解碼原理學習工程幾個類別。這些類別的詳細含義以下所列。html

  • 專業領域程序:一些有專業性質的程序。
  • FFmpeg示例程序:FFmpeg的類庫的各類示例程序。
  • FFmpeg移植程序:FFmpeg項目中移植到Windows的VC平臺下的程序。
  • 多媒體項目示例程序:除了FFmpeg以外其餘多媒體項目的示例程序。
  • 視音頻編解碼學習工程:用於學習視音頻編解碼原理的示例程序。

下面按照類別分別記錄每一個項目。每一個程序的介紹分紅「簡介」,「文章」,「項目主頁」三個部分:html5

  • 「簡介」使用幾句簡短的話介紹開源項目。
  • 「文章」則是我本身寫的有關該項目的文章。
  • 「項目主頁」則是該項目的主頁地址。

此前一直以SourceForge做爲各個項目的主頁地址。後來受到很多人的建議,將代碼在Github上也保存了一份;國內的開源中國的代碼託管作的也不錯,所以也在開源中國上保存了一份代碼。此外,在SourceForge上作了一個簡單的Wiki,在Github上作了一個簡單的Blog,方便對這兩個網站上的項目進行查找和訪問。上述三個網站上的項目列表能夠經過下列地址訪問。android



1. 專業領域程序

 

專業領域程序指的是主要應用於科學實驗方面的程序。這類程序並非視音頻技術開發必須的,主要用於研究工做。ios

1.1 VideoEye

簡介git

VideoEye是一個開源的實時視頻分析的軟件。本軟件能夠播放和分析視頻數據。它支持多種視頻流輸入方式:HTTP,RTMP,RTSP以及文件等等。該軟件能夠實時分析視頻流並能以圖形化的方式呈現其分析結果。github

文章web

《開源實時視頻碼流分析軟件:VideoEye》windows

項目主頁服務器

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

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的流媒體示例
相關文章
相關標籤/搜索