第11月第3天 直播 rtmp yuv

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

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 ecac ...

第13月第10天 swift3 0

1 這一條簡直莫名其妙。大體意思就是,你這個型別 any 不是個陣列或者字典,不能按照下標取東西。 我之前通過一個方法預設建立了一個字典,編譯器也認為這是個字典,所以允許我取東西,但是現在編譯器翻臉了,說你必須告訴我這是個字典我才能讓你取東西。okok。 1 dic as nsdictionary ...

第26月第20天 springboot

1 pom xml中新增支援web的模組 org springframework boot spring boot starter web pom xml檔案中預設有兩個模組 spring boot starter 核心模組,包括自動配置支援 日誌和yaml spring boot starter ...