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
voidglesvideomixer::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 檔案...