Android之ffmpeg-H264解碼-移植ffmpeg中的H264解碼部分到Android
H264解碼器原始碼,移植ffmpeg中的H264解碼部分到Android,深度刪減優化,在模擬器(320x480)中驗證通過。
程式的採用jni架構。介面部分,檔案讀取,視訊顯示都是用java做的,底層的視訊解碼用C來做滿足速度的要求。
在這個版本中,從H264碼流中分割出Nal是在java層做的,這樣在java層直接呼叫解碼時就知道是否有顯示視訊,缺點的就是耦合度/封裝性差一點。
如果採用在底層做Nal分割的方法,可以封裝得好看一些,但是每次送的資料有限制,如果送的資料太多,底層可能會一次解碼出好幾幀視訊,但是通知到介面層只能顯示一幀,造成丟幀的現象。 如果每次送的資料較少,就會有很多次底層呼叫沒有進行實質解碼,很小氣的做法,比如有一壓縮資料幀需要600位元組,如果一次送100個位元組給解碼器,那麼要送6次才會進行實質解碼,因為每個資料幀有大有小,所以只能取極小值才不會導致丟幀。
不過所有的編碼解碼都是各種因素平衡折中的結果,具體用什麼方法具體分析。
如果程式崩潰退出,優先考慮:
2)byte [] NalBuf = new byte[40980]; 緩衝區是否溢位。
如果有B幀,那肯定不是baseline。
為便於支援不同解析度的碼流,修改了程式碼。現在只需要修改H264Android.java檔案中第51,74,75行就可測試新解析度。
有些大解析度的碼流可能會異常,優先修改H264Android.java檔案中第161行把Nal緩衝區改大。
兩版本都是用 android-ndk-1.6_r1-windows.zip 和 cygwin 1.7.5-1, gcc4 4.3.4-3 (用 cygcheck -c檢視) 編譯。
注意 /jni/H264Android.cpp檔案添加了extern "C" 關鍵宣告。
感謝http://www.cnblogs.com/mcodec/articles/1780598.html
相關推薦
Android之ffmpeg-H264解碼-移植ffmpeg中的H264解碼部分到Android
H264解碼器原始碼,移植ffmpeg中的H264解碼部分到Android,深度刪減優化,在模擬器(320x480)中驗證通過。 程式的採用jni架構。介面部分,檔案讀取,視訊顯示都是用java做的,底層的視訊解碼用C來做滿足速度的要求。 在這個版本中,從H264碼
FFMPEG實現RTSP中H264資料流解碼 並且實時播放
主要改動原始檔案的讀取 播放器是播放本地檔案 而我們這裡需要讀取的是RTSP中H264資料流 char filepath[1024] = "rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.
03 ffmpeg 解碼SDK調用 H264轉YUV420
03 ffmpeg 解碼sdk調用 h264轉yuv420制作一個H264文件[root@localhost ~]# cd /home/ [root@localhost home]# wget http://sh.yinyuetai.com/uploads/videos/common/0E3E014EBF34
Android 音視頻深入 九 FFmpeg解碼視頻生成yuv文件(附源碼下載)
ava vco av_free html codec ati type free 索引 項目地址,求star https://github.com/979451341/Audio-and-video-learning-materials/tree/master/FFmpeg
FFmpeg解碼MP4檔案為h264和YUV檔案
#include <iostream> #ifdef __cplusplus extern "C" { #endif #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #in
Android直播開發之旅(12):初探FFmpeg開源框架
1. FFmpeg介紹與裁剪 1.1 FFmpeg簡介 FFmpeg(Fast forword mpeg,音視訊轉換器)是一個開源免費跨平臺的視訊和音訊流方案,它提供了錄製/音視訊編解碼、轉換以及流化音視訊的完整解決方案。ffmpeg4.0.2原始碼目錄結構如下: 目錄說明:
Mac環境下Android Studio移植FFmpeg
準備: 1. Android Studio 2. FFmpeg-2.8.4 3. android-ndk-r10e 一、ndk編譯ffmpeg 1.下載ffmpeg和ndk ffmpeg下載地址:http://
Android中整合ffmpeg(一):編譯ffmpeg
方案選擇 Android中整合ffmpeg的codec功能無非兩種方式: JNI直接呼叫,主要用於App開發(無許可權修改系統底層),如EXOPlayer,JPlayer等。 整合ffmpeg到OMX,即封裝ffmpeg為OMX的plugin,然後實現compone
Android 移植ffmpeg報錯:"atof" referenced by "libavformat.so"
cannot locate symbol "atof" referenced by "libavformat-57.so"... 原因:android的stdlib.h中atof是內聯的, 外部模組不能直接使用。跟android版本有關。 解決辦法:將所有的atof改成strtod 修改
Android直播開發之旅(13):使用FFmpeg+OpenSL ES播放PCM音訊
在Android直播開發之旅(12):初探FFmpeg開源框架一文中,我們詳細介紹了FFmpeg框架的架構、音視訊相關術語以及重要的結構體。為了能夠對這些重要的結構體有個深入的理解,本文將在此基礎上,利用FFmpeg解析rtsp資料流以獲取AAC音訊資料,再對AAC進行解碼為PC
FFMpeg 3.2移植到android遇到的各種坑,再一次總結
故事很長,慢慢看! 首先我又一個需求,一張jpg加上gif後,變成一個gif動圖。如果你用命令ffmpeg -i test.jpg -vf 'movie=test.gif[wm];[in][wm]overlay=0:0[out]' out.gif命令的話,我假設你的ff
FFMEPG 平臺移植,介面簡化和外部模組接入 (四)ffmpeg android移植(ffmpeg 視訊編碼)
FFMPEG 視訊編碼最常見的H264,H265需要X264,X265外部模組支援,可以從我們開源平臺的FFMPEG編譯專案裡面獲取程式碼和配置進行一鍵式編譯:https://github.com/Car-eye-team/Car-eye-FFMPEG,我們下面的程式碼主要是為了簡化程式碼呼叫結構。只需要配置
android移植ffmpeg的編譯
一,ffmpeg編譯(版本ffmpeg-HEAD-b2ad33d.tar) 1,安裝彙編編譯器[sudo apt-get install yasm]. 2,ffmpeg根目錄放編譯指令碼build_android.sh內容如下:(備註:NDK相關路徑按自己實際情況修改,若
android 移植 ffmpeg (二) 原始碼分析 JNI程式設計說明
例子原始碼 測試例子源地址: https://github.com/roman10/android-ffmpeg-tutorial JNI介面程式設計簡要說明 JNI作為一種程式設計介面,是解決Java語言與C/C++語言之間的通訊問題。 我們知道,Java程式碼編譯
Ubuntu下用NDK編譯移植FFmpeg 2.0(配置最新版x264)到Android平臺
將x264配置到ffmpeg中需要先編譯x264,生成靜態庫或動態庫。因為264的靜態庫本身不大(我編譯完成後是1.1M)且考慮到平臺移植問題,這裡選擇的是編譯生成靜態庫。 準備,新建工作空間 (1)建立總目錄FFmpeg-Android eg: mkdir workspace --> cd wor
Android平臺移植ffmpeg的一些筆記
首先: 是要編譯libjnivideo.so和libjniaudio.so 這兩個so因為不同的版本或者修改過的framework是不一樣的,所以需要在android原始碼中 編譯出自己的so。我的android 2.1原始碼是從官網下載回來的,沒有經過修改。 編譯主要
Android 音視頻深入 十 FFmpeg給視頻加特效(附源碼下載)
frame avi sca desc github cor 濾波器 struct find 項目地址,求starhttps://github.com/979451341/Audio-and-video-learning-materials/tree/master/FFmpe
最簡單的基於FFmpeg的移動端樣例附件:SDL Android HelloWorld
apt 圖片 va_arg dlopen info net src sdn 文件夾 =========================================
FFmpeg(8)-開啟和配置音視訊解碼器(avcodec_find_decoder()、avcodec_alloc_context3())
一.avcodec_find_decoder 獲取解碼器。在使用之前必須保證所用到的解碼器已經註冊,最簡單的就是呼叫avcodec_register_all() 函式,就像之前註冊解封裝器的時候,也要註冊一下。。 AVCodec *avcodec_find_decoder(enum AVCodecID i
Android底層開發之紅外遙控驅動移植
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!