開源視音頻項目彙總


目錄(?)[-]
  1. 專業領域程序
    1. 1 VideoEye
    2. 2 TIandSI
  2. FFmpeg示例程序
    1. 1 Simplest ffmpeg player
    2. 2 simplest ffmpeg audio player
    3. 3 simplest ffmpeg picture encoder
    4. 4 simplest ffmpeg video encoder
    5. 5 simplest ffmpeg audio encoder
    6. 6 simplest ffmpeg format
    7. 7 simplest ffmpeg streamer
    8. 8 simplest ffmpeg video filter
    9. 9 simplest ffmpeg swscale
    10. 10 simplest ffmpeg device
    11. 11 simplest ffmpeg mem handler
    12. 12 simplest ffmpeg avutil
    13. 12 simplest ffmpeg mobile
  3. FFmpeg移植程序
    1. 1 FFPLAY for MFC
    2. 2 FFMPEG for MFC
  4. 多媒體項目示例程序
    1. 1 simplest media play
    2. 2 simplest encoder
    3. 3 simplest libRTMP example
    4. 4 simplest libVLC example
    5. 5 simplest directshow example
  5. 視音頻編解碼學習工程
    1. 1 H264 Stream Analysis
    2. 2 AAC Stream Analysis
    3. 3 FLV Format Analysis
    4. 4 TS Format Analysis
    5. 5 JPEG Analysis
  6. 其他語言工程
    1. 1 Simplest Video Website
    2. 2 Simplest flashmedia example
  7. 附錄程序彙總表

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

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

下面按照類別分別記錄每個項目。每個程序的介紹分成“簡介”,“文章”,“項目主頁”三個部分:

  • “簡介”使用幾句簡短的話介紹開源項目。
  • “文章”則是我自己寫的有關該項目的文章。
  • “項目主頁”則是該項目的主頁地址。

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



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的流媒體示例
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章