FFmpeg安卓流媒體播放項(xiàng)目03:完成XThread類(lèi)

完成XThread類(lèi)

項(xiàng)目地址:https://github.com/popobo/BoPlayer

該播放器會(huì)啟用多個(gè)線程包括解封裝線程、音視頻解碼線程池凄、播放線程等等拼缝,所以必須有一個(gè)統(tǒng)一的線程類(lèi)來(lái)進(jìn)行統(tǒng)一的管理

代碼如下屿附,代碼解析請(qǐng)看注釋

  • XThread.h
#ifndef BOPLAY_XTHREAD_H
#define BOPLAY_XTHREAD_H

//sleep 毫秒
void XSleep(int ms);

class XThread {
public:
    //啟動(dòng)線程
    virtual void start();
    //通過(guò)isExit變量安全停止線程(不一定成功), 在開(kāi)發(fā)中不應(yīng)該操作線程句柄直接讓其停止, 風(fēng)險(xiǎn)大, 因?yàn)椴恢莱绦驁?zhí)行到哪
    virtual void stop();
    //入口主函數(shù)
    virtual void main(){}

protected:
    //退出標(biāo)志位
    bool isExit = false;
    //線程運(yùn)行標(biāo)志位
    bool isRunning = false;
private:
    void threadMain();
};


#endif //BOPLAY_XTHREAD_H
  • XThread.cpp
#include "XThread.h"
//c++11 線程庫(kù)
#include <thread>
#include "XLog.h"

//using namespace不要放在頭文件中
using namespace std;

//休眠函數(shù)
void XSleep(int ms){
    chrono::milliseconds sTime(ms);
    this_thread::sleep_for(sTime);
}

//啟動(dòng)線程
void XThread::start() {
    isExit = false;
    thread th(&XThread::threadMain, this);
    //當(dāng)前線程放棄對(duì)新建線程的控制, 防止對(duì)象被清空時(shí), 新建線程出錯(cuò)
    th.detach();
}

void XThread::stop() {
    isExit = true;
    //延時(shí)200ms等待線程結(jié)束運(yùn)行斑芜,因?yàn)檎{(diào)用stop()時(shí),目標(biāo)線程未必運(yùn)行到判斷isExit的語(yǔ)句
    for (int i = 0; i < 200; ++i) {
        XSleep(1);
        if (!isRunning){
            XLOGI("停止線程成功");
            return;
        }
        XSleep(1);
    }
    XLOGI("停止線程超時(shí)");
}

void XThread::threadMain() {
    XLOGI("線程函數(shù)進(jìn)入");
    isRunning = true;
    main();
    isRunning = false;
    XLOGI("線程函數(shù)退出");
}

解封裝接口類(lèi)IDemux繼承XThread并實(shí)現(xiàn)線程主函數(shù)

  • IDemux.h
#ifndef BOPLAY_IDEMUX_H
#define BOPLAY_IDEMUX_H

#include "XData.h"
#include "XThread.h"

//解封裝接口類(lèi)
class IDemux: public XThread {
public:
    //打開(kāi)文件或者流媒體 rtmp http rtsp
    virtual bool Open(const char *url) = 0;

    //讀取一幀數(shù)據(jù),數(shù)據(jù)由調(diào)用者清理
    virtual XData Read() = 0;

    //總時(shí)長(zhǎng)(單位ms)
    int totalMs = 0;
protected:
    //不要讓用戶訪問(wèn)
    virtual void main();
};


#endif //BOPLAY_IDEMUX_H
  • IDemux.cpp
#include "IDemux.h"
#include "XLog.h"

void IDemux::main() {
    while(!isExit){
        //解封裝線程的主函數(shù)主要是讀取數(shù)據(jù)
        XData xData = Read();
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末精绎,一起剝皮案震驚了整個(gè)濱河市速缨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌代乃,老刑警劉巖旬牲,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡原茅,警方通過(guò)查閱死者的電腦和手機(jī)吭历,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)擂橘,“玉大人晌区,你說(shuō)我怎么就攤上這事”词遥” “怎么了契讲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵仿吞,是天一觀的道長(zhǎng)滑频。 經(jīng)常有香客問(wèn)我,道長(zhǎng)唤冈,這世上最難降的妖魔是什么峡迷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮你虹,結(jié)果婚禮上绘搞,老公的妹妹穿的比我還像新娘。我一直安慰自己傅物,他們只是感情好夯辖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著董饰,像睡著了一般蒿褂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卒暂,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天啄栓,我揣著相機(jī)與錄音,去河邊找鬼也祠。 笑死昙楚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的诈嘿。 我是一名探鬼主播堪旧,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼奖亚!你這毒婦竟也來(lái)了崎场?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤遂蛀,失蹤者是張志新(化名)和其女友劉穎谭跨,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡螃宙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年蛮瞄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谆扎。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挂捅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出堂湖,到底是詐尸還是另有隱情闲先,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布无蜂,位于F島的核電站伺糠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏斥季。R本人自食惡果不足惜训桶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望酣倾。 院中可真熱鬧舵揭,春花似錦、人聲如沸躁锡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)映之。三九已至拦焚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惕医,已是汗流浹背耕漱。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抬伺,地道東北人螟够。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像峡钓,于是被迫代替她去往敵國(guó)和親妓笙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348