第11月第3天 直播 rtmp yuv

2022-06-23 15:03:58 字數 2354 閱讀 6468

1.

livevideocoresdkaudiounitrender ==> 

micsource::inputcallback ==> 

genericaudiomixer::pushbuffer

genericaudiomixer::mixthread() ==> 

aacencode::pushbuffer ==> 

split::pushbuffer ==> 

aacpacketizer::pushbuffer

==> librtmpsessionmgr::pushbuffer

伺服器  

brew install ffmpeg --with-ffplay

- (void

)didprocessframe:(cmsamplebufferref)samplebuffer

else

[mvideofilterview renderframe:samplebuffer];

});cvpixelbufferref pixelbufferref =cmsamplebuffergetimagebuffer(samplebuffer);

m_camerasource->buffercaptured(pixelbufferref);

}if(self.rtmpsessionstate ==kvcsessionstatenone)

}

==> m_camerasource->setoutput(m_videosplit)

==> m_videosplit->setoutput(m_h264encoder);

==> m_h264encoder->setoutput(m_h264split);

==> m_h264split->setoutput(m_h264packetizer);

==> m_h264packetizer->setoutput(m_outputsession);

void iosrtmpsession::pushbuffer(const uint8_t* const data, size_t size, imetadata&metadata)

dispatch_semaphore_signal(m_lock);

const iosrtmpmetadata_t inmetadata = static_cast(metadata);

unsigned

int uimsgtypeid = inmetadata.getdata();

if((rtmp_pt_audio != uimsgtypeid) && (rtmp_pt_video !=uimsgtypeid))

char* psendbuff = (char*)malloc(size);

if (psendbuff ==null)

memcpy(psendbuff, data, size);

int dts = inmetadata.getdata();

int pts =inmetadata.pts;

int iret = 0

;

if(rtmp_pt_audio ==uimsgtypeid)

else

if (rtmp_pt_video ==uimsgtypeid)

if (iret != 1

)

free(psendbuff);

}

2.使用rtmp協議(其他協議也類似)推流的大體流程如下:

建立rtmp連線到伺服器,成功後,建立另乙個序列佇列(傳送佇列)。

rtmp協議,需要在首幀傳送 sps/pps和audiospecificconfig這2種特別的幀資料。

結束直播,關閉推流,釋放資源。

3.yuv

a.b.

@synchronized(self) 

self.previouspixelbuffer =cfretain(pixelbuffer);

}

- (void

)didresignactive

- (void

) setupplayerbackgroundimage}}

}- (uiimage*)getuiimagefrompixelbuffer:(cvpixelbufferref)pixelbuffer

return

uiimage;

}

4.std:thread

void

glesvideomixer::start() );

}

3.ijkplayer

第28月第11天 vim b

1.首先以二進位制方式編輯這個檔案 vim b datafile 現在用 xxd 把這個檔案轉換成十六進製制 xxd 文字看起來像這樣 0000000 1f8b 0808 39d7 173b 0203 7474 002b 4e49 9.tt.ni 0000010 4b2c 8660 eb9c eca...

第2月第3天 egorefresh

egorefresh是很老的下拉重新整理,它是乙個uiview,在uitableview 下拉的時候顯示不同的介面。egorefresh和uitableview的耦合度很高,uitableview滾動和滾動停止是需要呼叫egorefresh響應滾動和停止滾動。uitableview又要實現egore...

11月14號學習 第12天

今天是把所有的單詞重新的服役更正一遍 public 公共 class 類 static 靜態的 void 返回值為空 main 主方法 string 字串 new 新建 if 如果 else 否 for 迴圈語句 boolean 判斷對錯 long 長整型 flaot 小數點後7位數 file 檔案...