NTP時間戳轉換

場景

騰訊視頻云直播答題NTP時間同步方案是在推流 URL 之后添加 &txAddTimestamp=2 參數(shù)(之前的txAddTimestamp=1會在小程序上遭遇播放黑屏問題)部脚,由服務器在視頻流每一幀打入一個帶有國際標準時間(誤差在 100ms 以內)的 SEI 時間戳。通過TXLiteAVSDK的 PLAY_EVT_GET_MESSAGE 消息事件獲取的是一個8字節(jié)的64位時間戳。以下介紹了如何把這個8字節(jié)的64位時間戳轉換成Unix時間戳沾谜。

原理圖

iOS轉換Unix時間戳

-(void) onPlayEvent:(int)EvtID withParam:(NSDictionary*)param
{
    NSDictionary* dict = param;
    
    dispatch_async(dispatch_get_main_queue(), ^{
        //消息事件
        if (EvtID == PLAY_EVT_GET_MESSAGE) {
            //事件戳轉換
            long tv = [self byteArrayToInt:param[@"EVT_GET_MSG"]];;
            long sv = tv / 1000;    // 服務器返回的是毫秒Unix timestamp沃呢,這里轉換成秒
            NSLog(@"time %ld", sv);
        } 
    });
}

-(long)byteArrayToInt:(NSData *)data {
    Byte *byteArray = (Byte *)data.bytes;
    int a_len = 8;
    Byte *a = (Byte *)malloc(a_len);
    int i = a_len - 1;
    int j = (int)data.length - 1;
    for (; i >= 0; i--, j--) {// 從b的尾部(即int值的低位)開始copy數(shù)據(jù)
        if (j >= 0)
            a[i] = byteArray[j];
        else
            a[i] = 0;// 如果b.length不足4,則將高位補0
    }
    // 注意此處和byte數(shù)組轉換成int的區(qū)別在于擦耀,下面的轉換中要將先將數(shù)組中的元素轉換成long型再做移位操作霸奕,
    // 若直接做位移操作將得不到正確結果轴咱,因為Java默認操作數(shù)字時铭乾,若不加聲明會將數(shù)字作為int型來對待剪廉,此處必須注意。
    long v0 = (long) (a[0] & 0xff) << 56;// &0xff將byte值無差異轉成int,避免Java自動類型提升后,會保留高位的符號位
    long v1 = (long) (a[1] & 0xff) << 48;
    long v2 = (long) (a[2] & 0xff) << 40;
    long v3 = (long) (a[3] & 0xff) << 32;
    long v4 = (long) (a[4] & 0xff) << 24;
    long v5 = (long) (a[5] & 0xff) << 16;
    long v6 = (long) (a[6] & 0xff) << 8;
    long v7 = (long) (a[7] & 0xff);
    free(a);
    return v0 + v1 + v2 + v3 + v4 + v5 + v6 + v7;
}

Android轉換Unix時間戳

long timeStamp = byteArrayToInt(param.getByteArray(TXLiveConstants.EVT_GET_MSG));
/**
* 將8字節(jié)的byte數(shù)組轉成一個long值
*/
public static long byteArrayToInt(byte[] byteArray) {
        byte[] a = new byte[8];
        int i = a.length - 1, j = byteArray.length - 1;
        for (; i >= 0; i--, j--) {// 從b的尾部(即int值的低位)開始copy數(shù)據(jù)
            if (j >= 0)
                a[i] = byteArray[j];
            else
                a[i] = 0;// 如果b.length不足4,則將高位補0
        }
        // 注意此處和byte數(shù)組轉換成int的區(qū)別在于炕檩,下面的轉換中要將先將數(shù)組中的元素轉換成long型再做移位操作斗蒋,
        // 若直接做位移操作將得不到正確結果,因為Java默認操作數(shù)字時捧书,若不加聲明會將數(shù)字作為int型來對待吹泡,此處必須注意。
        long v0 = (long) (a[0] & 0xff) << 56;// &0xff將byte值無差異轉成int,避免Java自動類型提升后,會保留高位的符號位
        long v1 = (long) (a[1] & 0xff) << 48;
        long v2 = (long) (a[2] & 0xff) << 40;
        long v3 = (long) (a[3] & 0xff) << 32;
        long v4 = (long) (a[4] & 0xff) << 24;
        long v5 = (long) (a[5] & 0xff) << 16;
        long v6 = (long) (a[6] & 0xff) << 8;
        long v7 = (long) (a[7] & 0xff);
        return v0 + v1 + v2 + v3 + v4 + v5 + v6 + v7;
}

示例

運行示例圖
轉換示例圖
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末经瓷,一起剝皮案震驚了整個濱河市爆哑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舆吮,老刑警劉巖揭朝,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異色冀,居然都是意外死亡潭袱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門锋恬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屯换,“玉大人,你說我怎么就攤上這事与学⊥冢” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵索守,是天一觀的道長晕窑。 經(jīng)常有香客問我,道長卵佛,這世上最難降的妖魔是什么杨赤? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任敞斋,我火速辦了婚禮,結果婚禮上疾牲,老公的妹妹穿的比我還像新娘植捎。我一直安慰自己,他們只是感情好说敏,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布鸥跟。 她就那樣靜靜地躺著,像睡著了一般盔沫。 火紅的嫁衣襯著肌膚如雪医咨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天架诞,我揣著相機與錄音拟淮,去河邊找鬼。 笑死谴忧,一個胖子當著我的面吹牛很泊,可吹牛的內容都是我干的。 我是一名探鬼主播沾谓,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼委造,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了均驶?” 一聲冷哼從身側響起昏兆,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎妇穴,沒想到半個月后爬虱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡腾它,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年跑筝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞒滴。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡曲梗,死狀恐怖,靈堂內的尸體忽然破棺而出妓忍,到底是詐尸還是另有隱情稀并,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布单默,位于F島的核電站,受9級特大地震影響忘瓦,放射性物質發(fā)生泄漏搁廓。R本人自食惡果不足惜引颈,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望境蜕。 院中可真熱鬧蝙场,春花似錦、人聲如沸粱年。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽台诗。三九已至完箩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拉队,已是汗流浹背弊知。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粱快,地道東北人秩彤。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像事哭,于是被迫代替她去往敵國和親漫雷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內容