ffmpeg源碼
㈠ ffmpeg源碼是c還是c++
是c語言開發的。教你一種辦法,查看庫函數等的源碼方法。
網路進入github網站,搜索ffmpeg,找到源碼。查看文件類型。
如圖
就知道是c語言開發的了
㈡ ffmpeg 有必要學習源碼嗎
ffmpeg 官方資料 維護的不是很好,很多函數的說明都不夠明確。所以學習ffmpeg的最好的方式是看源碼。ffmpeg的源碼結構還是挺清晰的,可讀性比較強,可以從官方的幾個常式開始看。網上也有中文的ffmpeg教程,講解了幾個主要函數,可以作為一個參考。如果只是應用的話,光看命令就行了。
㈢ 怎麼修改ffmpeg裡面的源碼,讓它實現流共享
while (1) {
AVPacket pkt;
// 不知道pkt是否完整
ret = av_read_frame(f->ctx, &pkt);
if (ret == AVERROR(EAGAIN)) {
av_usleep(10000);
continue;
}
if (ret < 0) {
av_thread_message_queue_set_err_recv(f->in_thread_queue, ret);
break;
}
}
FFMpeg不提供介面,那麼就只有修改FFMpeg源碼,瀏覽FFMpeg源碼一天後,對外的介面只需要在AVPacket結構體裡面增加一個判斷包完整性的標志變數,修改源碼後的介面調用如下:
while (1) {
AVPacket pkt;
ret = av_read_frame(f->ctx, &pkt);
if (pkt.nLostPackets) {
// Do something.
} else {
// Do something
}
}
㈣ ffmpeg有demo嗎
是要編譯libjnivideo.so和libjniaudio.so 這兩個so因為不同的版本或者修改過的framework是不一樣的,所以需要在android源碼中 編譯出自己的so。我的android 2.1源碼是從官網下載回來的,沒有經過修改。
下載鏈接中的native目錄下的源碼到framework/base目錄下具體看他的目錄結構。https://github:com/havlenapetr/android_frameworks_base編譯主要有3個錯誤
1.
library 'libjnigraphics.so' not in prelink map
當前目錄下的Android.mk 加上
LOCAL_PRELINK_MODULE := false2.
frameworks/base/native/video/jni/surface.cpp:17:36: error: surfaceflinger/Surface.h: No such file or directory
修改頭文件
#include <android/surface.h>
#include <ui/Surface.h>
#include <utils/Log.h>
#include <SkBitmap.h>
#include <SkCanvas.h>3.
make: *** 沒有規則可以創建「out/target/proct/generic/obj/SHARED_LIBRARIES/libjnivideo_intermediates/LINKED/libjnivideo.so」需要的目標「out/target/proct/generic/obj/lib/libsurfaceflinger_client.so」。 停止。
當前目錄下的Android.mk
LOCAL_SHARED_LIBRARIES := /
libskia /
libui /
libutils /
liblog
到這里如果幸運的話可以編譯出so。其次是編譯libffmpeg_jni.so
需要修改的地方:
1.
jni/jni/Android.mkLOCAL_C_INCLUDES += /
$(LOCAL_PATH)/../libffmpeg /
$(LOCAL_PATH)/../libmediaplayer /
$(LOCAL_PATH)/../include /
$(LOCAL_PATH)/../include/androidifeq ($(IN_NDK),true)
LOCAL_LDLIBS := -llog
else
LOCAL_PRELINK_MODULE := false
LOCAL_LDLIBS := -llog
LOCAL_SHARED_LIBRARIES := liblog
endif
2.
Vector.h#include <new>
#include <stdint.h>
#include <sys/types.h>#include <cutils/log.h>
#include <utils/VectorImpl.h>
#include <utils/TypeHelpers.h>
#include <android/Errors.h>
3.
<utils/TypeHelpers.h>4
VectorImpl.h#include <assert.h>
#include <stdint.h>
#include <sys/types.h>
#include <android/Errors.h>5.
VectorImpl.cpp
#include <string.h>
#include <stdlib.h>
#include <stdio.h>#include <cutils/log.h>
#include <android/Errors.h>
#include <utils/SharedBuffer.h>
#include <utils/VectorImpl.h>
同時也要把剛才兩個編譯出來的so放到obj/local/armeabi目錄下,之後就可以了編譯出libffmpeg_jni.so.
最後也要把剛才兩個so放到libs/armeabi目錄下。要不然運行的時候找不到。
播放的時候太卡了,聲音也沒有同步。
㈤ FFmpeg和h.264是什麼關系,是不是FFmpeg這套源碼中有以h.264標准設計的編碼器,可以這樣理解嗎
H.264是一種編碼協議,FFMPEG官網上是這樣說的:FFmpeg is a complete, cross-platform solution to record, convert and stream audio and video. It includes libavcodec - the leading audio/video codec library. 在FFMPEG中還沒有H.264協議的編碼支持,這個要結合X264項目來進行H264編碼,先把X264裝上,然後再進行FFMPEG的配置,至於ffmpeg + x264進行H.264編碼可以再查看一些相關的帖子.
㈥ ffmpeg 代碼是不是完全開源
是的
本開源代碼播放器使用的音視頻解碼代碼來源於ffmpeg-0.6.3(http://www.ffmpeg.org),
jni銜接代碼和java層代碼來源於havlenapetr(https://github.com/havlenapetr/FFMpeg)。
移植ffmpeg到android的常規關鍵點網上有很多的帖子可以參考,也可以用文件夾比較工具比較一下,看看添加修改刪除了那些文件。
本開源代碼的編譯環境
1: Android SDK 2.2版,
2: NDK r4版,注意要導出NDK宏,
3: IDE開發環境是 eclips 3.5 版
4: libffplay.so是在Android 2.2版源碼目錄樹中編譯出來的,使用Ubuntu10.04和VMware7.1.1版,目前源碼不公開
5: libffmpeg.so編譯步驟,cd /cygwin/c/ffplay, ./config_r4.sh, $NDK/ndk-build
6: PC主機開發環境是windows xp。
特別注意,此demo只能在 Android SDK 2.2版上使用,其他版本有修改源碼,重新編譯才行。
此開源代碼解決了幾個特別關鍵點,達到實用水平。幾個關鍵點如下:
1:arm匯編代碼編譯支持,主要是在幾個.mk文件中添加LOCAL_ARM_MODE := arm語句,
在config_r4.sh文件中添加--arch=armv5te和--enable-asm 等開關。
2:在ffmpeg config_r4.sh配置文件中關閉了一些不用的選項後,連接時總是報一些莫名其妙的連接錯誤,
本開源代碼給出終極解決方案(在/jni/jni/Android.mk文件中添加 LOCAL_LDLIBS += C:/ffplay/bin/ndk/local/armeabi/libavcodec.a等語句)。
3:修改havlenapetr中的視頻顯示錯誤bug,經測試havlenapetr原始代碼在模擬器設置為320x480時顯示正確,在更大的解析度下顯示錯誤,
本開源代碼已修改好此bug,現在無論什麼解析度都可以正確顯示。
此開源代碼其他注意事項:
1:jni銜接代碼相比havlenapetr精簡了幾個數量級,更方便網友們研習。
2:此開源代碼不包括play,pause,stop,seek和視音頻同步等功能實現代碼,這部分代碼不開源。
3:Android jni層直接輸出音頻示例,Android jni層直接輸出視頻示例,基於ffmpeg的Android播放器開源代碼,三個工程使用相同的庫,相同的方法和技巧,可相互參考。
在moto defy me525上測試通過。
㈦ ffmpeg源碼太大了,我只想要H264轉到MP4的部分代碼,該怎麼辦
mp4是容器,在容器格式庫中找,libavformat
h.264是視頻編碼在編碼庫中找,libavcodec
㈧ ffmpeg是基於什麼語言編寫的
很負責人的告訴你 是用c語言寫的 是個龐然大物 集成了編碼解碼等功能 裡面按功能劃分成了幾個庫 也依賴了一些其他的庫 FFmpeg被應用於很多的播放器甚至是商業產品中 比如暴風影音 QQ影音等播放器都是基於它開發的 你可以在GitHub上或者FFmpeg官網上找到它的源碼
㈨ aforge.video.ffmpeg 源碼在哪
AForge.Net 是C#的一個圖像計算機視覺庫,該庫是一個開源項目,提供很多圖像的處理,和視頻處理功能