#如何在iOS平臺(tái)上對(duì)一個(gè)視頻進(jìn)行解碼和顯示

前言

1.寫(xiě)作原因:iOS自己的播放器支持的格式有限拴签,目前只有avi,mkv,mov,m4v,mp4等旗们,像flv上渴,rmvb等格式是不支持的,必須借助ffmpeg等第三方才能實(shí)現(xiàn)盛嘿。

2.寫(xiě)作目的:利用第三方ffmpeg完成對(duì)不支持格式的解碼和顯示括袒,目前只針對(duì)視頻幀。

理論說(shuō)明:

1.對(duì)于一個(gè)不能播放的視頻格式芥炭,我們的方法是先把他解碼成視頻幀园蝠,然后再以圖片的顯示一幀幀的顯示在屏幕上痢士。

2.解碼:具體包括解復(fù)用,解碼和存儲(chǔ)流信息善延。

代碼實(shí)現(xiàn)(只關(guān)注解碼流程)

  //注冊(cè)所有的文件格式和編解碼器
    avcodec_register_all();
    av_register_all();
    
    //打開(kāi)視頻文件,將文件格式的上下文傳遞到AVFormatContext類(lèi)型的結(jié)構(gòu)體中
    
    if (avformat_open_input(&pFormatContext, [moviePath cStringUsingEncoding:NSASCIIStringEncoding], NULL, NULL)) {
        av_log(NULL, AV_LOG_ERROR, "Couldn't open file\n");
        goto initError;
    }
    //查找文件中視頻流的信息
    if (avformat_find_stream_info(pFormatContext, NULL) < 0) {
        av_log(NULL, AV_LOG_ERROR, "Couldn't find a video stream in the input");
        goto initError;
    }
    
    //find the first video stream
    if ((videoStream = av_find_best_stream(pFormatContext, AVMEDIA_TYPE_VIDEO, -1, -1, &pCodec, 0)) < 0) {
        av_log(NULL, AV_LOG_ERROR, "Cannot find a video stream in the input file\n");
        goto initError;
    }
   
    //
    pCodecContext = pFormatContext->streams[videoStream]->codec;

    //找到該視頻流對(duì)應(yīng)的解碼器
    pCodec = avcodec_find_decoder(pCodecContext->codec_id);

    if (pCodec == NULL) {
        av_log(NULL, AV_LOG_ERROR, "Unsupported codec!\n");
        goto initError;
    }
    //打開(kāi)解碼器
    if (avcodec_open2(pCodecContext, pCodec, NULL) < 0) {
        av_log(NULL, AV_LOG_ERROR, "Cannot open video decoder\n");
        goto initError;
    }
    
    pFrame = av_frame_alloc();
    
    
    _outputWidth = pCodecContext->width;
    self.outputHeight = pCodecContext->height;


后面就是將YUV數(shù)據(jù)轉(zhuǎn)換為RGB易遣,然后將RGB圖像轉(zhuǎn)換為UIImage豆茫,便可以在屏幕上顯示出來(lái)了這里不再贅述屋摇,git代碼上有所體現(xiàn)。

代碼已經(jīng)傳到git上面

演示:


如果你覺(jué)得有用火脉,就加個(gè)star吧??

注意:

** 1.代碼只做到了將視頻幀的解碼忘分,并沒(méi)有涉及到音頻,因此不會(huì)有聲音出現(xiàn) **

** 2. 參考KXmovie**

** 3. ffmpeg的編譯已經(jīng)寫(xiě)過(guò)一篇重斑,不再贅述肯骇,使用時(shí)直接拖進(jìn)項(xiàng)目中即可,需要添加的依賴(lài)庫(kù)git上的項(xiàng)目也有所體現(xiàn)笛丙。**

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末漾脂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子胚鸯,更是在濱河造成了極大的恐慌骨稿,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姜钳,死亡現(xiàn)場(chǎng)離奇詭異坦冠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)哥桥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)辙浑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人拟糕,你說(shuō)我怎么就攤上這事∷椭停” “怎么了侠草?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)累澡。 經(jīng)常有香客問(wèn)我梦抢,道長(zhǎng)般贼,這世上最難降的妖魔是什么愧哟? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮哼蛆,結(jié)果婚禮上蕊梧,老公的妹妹穿的比我還像新娘。我一直安慰自己腮介,他們只是感情好肥矢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般甘改。 火紅的嫁衣襯著肌膚如雪旅东。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天十艾,我揣著相機(jī)與錄音抵代,去河邊找鬼。 笑死忘嫉,一個(gè)胖子當(dāng)著我的面吹牛荤牍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播庆冕,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼康吵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了访递?” 一聲冷哼從身側(cè)響起晦嵌,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拷姿,沒(méi)想到半個(gè)月后耍铜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡跌前,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年棕兼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抵乓。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伴挚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出灾炭,到底是詐尸還是另有隱情茎芋,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布蜈出,位于F島的核電站田弥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏铡原。R本人自食惡果不足惜偷厦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望燕刻。 院中可真熱鬧只泼,春花似錦、人聲如沸卵洗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至十绑,卻和暖如春聚至,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背本橙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工晚岭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人勋功。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓坦报,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親狂鞋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子片择,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容