Android音視頻開發(fā)-入門(一)

赤壁賦

壬戌之秋,七月既望,蘇子與客泛舟游于赤壁之下。清風(fēng)徐來,水波不興。舉酒屬客,誦明月之詩(shī),歌窈窕之章。少焉,月出于東山之上,徘徊于斗牛之間。白露橫江,水光接天。縱一葦之所如,凌萬頃之茫然。浩浩乎如馮虛御風(fēng),而不知其所止;飄飄乎如遺世獨(dú)立,羽化而登仙。

于是飲酒樂甚,扣舷而歌之。歌曰:“桂棹兮蘭槳,擊空明兮溯流光。渺渺兮予懷,望美人兮天一方?!笨陀写刀春嵳撸懈瓒椭?。其聲嗚嗚然,如怨如慕,如泣如訴,余音裊裊,不絕如縷。舞幽壑之潛蛟,泣孤舟之嫠婦。

蘇子愀然,正襟危坐而問客曰:“何為其然也?”客曰:“月明星稀,烏鵲南飛,此非曹孟德之詩(shī)乎?西望夏口,東望武昌,山川相繆,郁乎蒼蒼,此非孟德之困于周郎者乎?方其破荊州,下江陵,順流而東也,舳艫千里,旌旗蔽空,釃酒臨江,橫槊賦詩(shī),固一世之雄也,而今安在哉?況吾與子漁樵于江渚之上,侶魚蝦而友麋鹿,駕一葉之扁舟,舉匏樽以相屬。寄蜉蝣于天地,渺滄海之一粟。哀吾生之須臾,羨長(zhǎng)江之無窮。挾飛仙以遨游,抱明月而長(zhǎng)終。知不可乎驟得,托遺響于悲風(fēng)?!?/p>

蘇子曰:“客亦知夫水與月乎?逝者如斯,而未嘗往也;盈虛者如彼,而卒莫消長(zhǎng)也。蓋將自其變者而觀之,則天地曾不能以一瞬;自其不變者而觀之,則物與我皆無盡也,而又何羨乎!且夫天地之間,物各有主,茍非吾之所有,雖一毫而莫取。惟江上之清風(fēng),與山間之明月,耳得之而為聲,目遇之而成色,取之無禁,用之不竭,是造物者之無盡藏也,而吾與子之所共適?!?/p>

客喜而笑,洗盞更酌。肴核既盡,杯盤狼藉。相與枕藉乎舟中,不知東方之既白。

希望自己努力堅(jiān)持

最近工作方面需要接觸到音視頻方面,然而自己這方面卻是一個(gè)小白,所以決定自己動(dòng)手學(xué)會(huì)這方面的內(nèi)容,看了一下自己需要學(xué)習(xí)的東西太多太多,網(wǎng)上的資料比較零散,一下子陷入了迷茫.直到在網(wǎng)上看到一篇音視頻開發(fā)指南Android 音視頻開發(fā)入門指南,突然感覺自己又有了目標(biāo)和動(dòng)力,所以接下來就按照上面的步驟一步步進(jìn)階!

進(jìn)階步驟

  1. 在 Android 平臺(tái)繪制一張圖片,使用至少 3 種不同的 API,ImageView,SurfaceView,自定義 View
  1. 在 Android 平臺(tái)使用 AudioRecord 和 AudioTrack API 完成音頻 PCM 數(shù)據(jù)的采集和播放,并實(shí)現(xiàn)讀寫音頻 wav 文件
  1. 在 Android 平臺(tái)使用 Camera API 進(jìn)行視頻的采集,分別使用 SurfaceView、TextureView 來預(yù)覽 Camera 數(shù)據(jù),取到 NV21 的數(shù)據(jù)回調(diào)
  1. 學(xué)習(xí) Android 平臺(tái)的 MediaExtractor 和 MediaMuxer API,知道如何解析和封裝 mp4 文件
  1. 學(xué)習(xí) Android 平臺(tái) OpenGL ES API,了解 OpenGL 開發(fā)的基本流程,使用 OpenGL 繪制一個(gè)三角形
  1. 學(xué)習(xí) Android 平臺(tái) OpenGL ES API,學(xué)習(xí)紋理繪制,能夠使用 OpenGL 顯示一張圖片
  1. 學(xué)習(xí) MediaCodec API,完成音頻 AAC 硬編、硬解
  1. 學(xué)習(xí) MediaCodec API,完成視頻 H.264 的硬編、硬解
  1. 串聯(lián)整個(gè)音視頻錄制流程,完成音視頻的采集、編碼、封包成 mp4 輸出
  1. 串聯(lián)整個(gè)音視頻播放流程,完成 mp4 的解析、音視頻的解碼、播放和渲染
  1. 進(jìn)一步學(xué)習(xí) OpenGL,了解如何實(shí)現(xiàn)視頻的剪裁、旋轉(zhuǎn)、水印、濾鏡,并學(xué)習(xí) OpenGL 高級(jí)特性,如:VBO,VAO,F(xiàn)BO 等等
  1. 學(xué)習(xí) Android 圖形圖像架構(gòu),能夠使用 GLSurfaceviw 繪制 Camera 預(yù)覽畫面
  1. 深入研究音視頻相關(guān)的網(wǎng)絡(luò)協(xié)議,如 rtmp,hls,以及封包格式,如:flv,mp4
  1. 深入學(xué)習(xí)一些音視頻領(lǐng)域的開源項(xiàng)目,如 webrtc,ffmpeg,ijkplayer,librtmp 等等
  1. 將 ffmpeg 庫(kù)移植到 Android 平臺(tái),結(jié)合上面積累的經(jīng)驗(yàn),編寫一款簡(jiǎn)易的音視頻播放器
  1. 將 x264 庫(kù)移植到 Android 平臺(tái),結(jié)合上面積累的經(jīng)驗(yàn),完成視頻數(shù)據(jù) H264 軟編功能
  1. 將 librtmp 庫(kù)移植到 Android 平臺(tái),結(jié)合上面積累的經(jīng)驗(yàn),完成 Android RTMP 推流功能
  1. 上面積累的經(jīng)驗(yàn),做一款短視頻 APP,完成如:斷點(diǎn)拍攝、添加水印、本地轉(zhuǎn)碼、視頻剪輯、視頻拼接、MV 特效等功能

看到?jīng)]這一條一條的.列的多好,我準(zhǔn)備花半年的時(shí)間來學(xué)習(xí).

實(shí)現(xiàn)第一條

  • 在 Android 平臺(tái)繪制一張圖片,使用至少 3 種不同的 API,ImageView,SurfaceView,自定義 View

ImageView,自定義就不用說了吧,下面重點(diǎn)看看SurfaceView的繪制圖片.

直接上代碼:

public class SurfaceViewDraw extends SurfaceView implements SurfaceHolder.Callback {

    private SurfaceHolder surfaceHolder;
    private Paint paint;
    private Rect aa;
    private Bitmap bitmap;

    public SurfaceViewDraw(Context context) {
        this(context, null);
    }

    public SurfaceViewDraw(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public SurfaceViewDraw(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        //得到控制器
        surfaceHolder = getHolder();
        //對(duì)surfaceview進(jìn)行操作
        surfaceHolder.addCallback(this);

        paint = new Paint();

        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.olo);

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
         //重要的一點(diǎn)要說明.在這里可以在線程里面用canvas繪制圖片,所以為什么SurfaceView比較時(shí)候繪制圖片和圖形
        Canvas canvas = surfaceHolder.lockCanvas();
        //開始畫
        canvas.drawBitmap(bitmap, new Matrix(), paint);
        //解鎖畫布
        surfaceHolder.unlockCanvasAndPost(canvas);
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        //surface 大小發(fā)生變化的時(shí)候
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        //銷毀時(shí)發(fā)生,一般在這里將畫圖停止.釋放
    }
}

結(jié)果

image.png

第一步很好實(shí)現(xiàn)了!繼續(xù)努力!!,堅(jiān)持下去!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容