真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MediaClock及音視頻同步

Nuplayer中音視頻同步主要依靠MediaClock中記錄的錨點(diǎn)時(shí)間,所以先看下MediaClock類

創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)營(yíng)銷推廣、網(wǎng)站重做改版、漯河網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場(chǎng)景定制、成都商城網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為漯河等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

1,1

MediaClock::MediaClock()
????:?mAnchorTimeMediaUs(-1),
??????mAnchorTimeRealUs(-1),
??????mMaxTimeMediaUs(INT64_MAX),
??????mStartingTimeMediaUs(-1),
??????mPlaybackRate(1.0)?{
}

1.2錨點(diǎn)時(shí)間更新

void?MediaClock::updateAnchor(
int64_t?anchorTimeMediaUs,
int64_t?anchorTimeRealUs,
int64_t?maxTimeMediaUs)?{
????Mutex::Autolock?autoLock(mLock);
????int64_t?nowUs?=?ALooper::GetNowUs();
????int64_t?nowMediaUs?=
????anchorTimeMediaUs?+?(nowUs?-?anchorTimeRealUs)?*?(double)mPlaybackRate;?//mPlaybackRate是播放倍速
????//下面這段是超過(guò)閾值的保護(hù)???
????if?(mAnchorTimeRealUs?!=?-1)?{
????int64_t?oldNowMediaUs?=
????mAnchorTimeMediaUs?+?(nowUs?-?mAnchorTimeRealUs)?*?(double)mPlaybackRate;
????if?(nowMediaUs??oldNowMediaUs?-?kAnchorFluctuationAllowedUs)?{
????return;
????}
????}
????//mAnchorTimeRealUs??當(dāng)前系統(tǒng)時(shí)間,錨點(diǎn)real系統(tǒng)時(shí)間戳,可以理解為最后一幀播放的時(shí)間,對(duì)應(yīng)到系統(tǒng)時(shí)鐘后的時(shí)間。
????//mAnchorTimeMediaUs???為錨點(diǎn)媒體時(shí)間戳,可以理解為從最開(kāi)始播放時(shí)記錄下來(lái)的第一個(gè)媒體時(shí)間戳,一直到當(dāng)前正在播放這一幀的總時(shí)長(zhǎng),但是它主要將音頻pts與系統(tǒng)時(shí)鐘做了統(tǒng)一,即將音頻同步到系統(tǒng)時(shí)鐘上。
????在這函數(shù)里面只是考慮到函數(shù)調(diào)用的耗時(shí),將這個(gè)耗時(shí)加到mAnchorTimeMediaUs?而已,本質(zhì)還是直接記錄傳入的2個(gè)入?yún)r(shí)間
????mAnchorTimeRealUs?=?nowUs;
????mAnchorTimeMediaUs?=?nowMediaUs;
}

??

?1.3從別人鏈接處摘錄的解釋

realTimeUs = PTS - nowMediaUs + nowUs? ? ??

getRealTimeFor

= PTS - (mAnchorTimeMediaUs + (nowUs - mAnchorTimeRealUs)) + nowUs

mAnchorTimeMediaUs + (nowUs - mAnchorTimeRealUs)? 是在

getMediaTime_l中計(jì)算

mAnchorTimeMediaUs錨點(diǎn)媒體時(shí)間戳,可以理解為最開(kāi)始播放的時(shí)候記錄下來(lái)的第一個(gè)媒體時(shí)間戳

mAnchorTimeRealUs錨點(diǎn)real系統(tǒng)時(shí)間戳,

nowUs - mAnchorTimeRealUs即為從開(kāi)始播放到現(xiàn)在,系統(tǒng)時(shí)間經(jīng)過(guò)了多久。? ??

這個(gè)時(shí)間再加上mAnchorTimeMediaUs,即為“在當(dāng)前系統(tǒng)時(shí)間下,對(duì)應(yīng)的媒體時(shí)間戳”,

用PTS減去這個(gè)時(shí)間,表示“還有多久該播放這一幀”。

最后再加上一個(gè)系統(tǒng)時(shí)間,即為這一幀應(yīng)該顯示的時(shí)間。

---------------------?

作者:zhanghui_cuc?

來(lái)源:CSDN?

原文:https://blog.csdn.net/nonmarking/article/details/78746671?

版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!

實(shí)際就是根據(jù)codec解出來(lái)的PTS, 然后比較音頻的錨點(diǎn)值,計(jì)算出來(lái)當(dāng)前這視頻幀應(yīng)當(dāng)延遲多久post,錨點(diǎn)時(shí)間是在每個(gè)音頻幀時(shí)都計(jì)算的,按我自己理解是

(nowUs - mAnchorTimeRealUs) 是距離上個(gè)音頻幀播放有多久

mAnchorTimeMediaUs + (nowUs - mAnchorTimeRealUs)? 是對(duì)應(yīng)音頻幀應(yīng)該播放的視頻幀時(shí)間戳
PTS - (mAnchorTimeMediaUs + (nowUs - mAnchorTimeRealUs)) + nowUs? 這個(gè)是PTS-真正要播放的視頻幀時(shí)間戳 計(jì)算出該視頻幀要延遲多久 再加上當(dāng)前時(shí)間得到絕對(duì)時(shí)間

mMediaClock->getRealTimeFor(mediaTimeUs,?&realTimeUs)?==?OK
delayUs?=?realTimeUs?-?nowUs;
msg->setWhat(kWhatPostDrainVideoQueue);
msg->post(postDelayUs);
//?targetMediaUs?PTS???outRealUs?出參,實(shí)際要播放時(shí)刻
status_t?MediaClock::getRealTimeFor(
int64_t?targetMediaUs,?int64_t?*outRealUs)?const?{

????int64_t?nowUs?=?ALooper::GetNowUs();
????int64_t?nowMediaUs;
????status_t?status?=
????getMediaTime_l(nowUs,?&nowMediaUs,?true?/*?allowPastMaxTime?*/);
????if?(status?!=?OK)?{
????return?status;
????}
????*outRealUs?=?(targetMediaUs?-?nowMediaUs)?/?(double)mPlaybackRate?+?nowUs;
????return?OK;
}
status_t?MediaClock::getMediaTime_l(
int64_t?realUs,?int64_t?*outMediaUs,?bool?allowPastMaxTime)?const?{

????int64_t?mediaUs?=?mAnchorTimeMediaUs
????+?(realUs?-?mAnchorTimeRealUs)?*?(double)mPlaybackRate;
????if?(mediaUs?>?mMaxTimeMediaUs?&&?!allowPastMaxTime)?{
????mediaUs?=?mMaxTimeMediaUs;
????}
????if?(mediaUs?            
            
                        
分享標(biāo)題:MediaClock及音視頻同步
文章位置:http://weahome.cn/article/pshccd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部