国产强伦姧在线观看无码,中文字幕99久久亚洲精品,国产精品乱码在线观看,色桃花亚洲天堂视频久久,日韩精品无码观看视频免费

      您現(xiàn)在的位置:智能制造網(wǎng)>技術(shù)中心>ARM + Qt + mplayer 開(kāi)發(fā)過(guò)程

      直播推薦

      更多>

      企業(yè)動(dòng)態(tài)

      更多>

      推薦展會(huì)

      更多>

      ARM + Qt + mplayer 開(kāi)發(fā)過(guò)程

      2013年11月07日 19:36:11人氣:1703來(lái)源:上海安嵌信息科技有限公司

      嵌入式技術(shù):按照PC機(jī)的特點(diǎn),根據(jù)特定的應(yīng)用用需要,通過(guò)裁剪軟硬件而組成的可以獨(dú)立運(yùn)行的系統(tǒng)的一門(mén)計(jì)算機(jī)技術(shù)。

      流媒體的產(chǎn)生:隨著 Niternet寬帶化的發(fā)展趨勢(shì),高速的實(shí)時(shí)傳輸已成為實(shí)現(xiàn),傳統(tǒng)的多媒體在網(wǎng)絡(luò)上客戶端必須把多媒體檔全部下載完畢后,在客戶端才能播放,而流媒體以流的形式進(jìn)行數(shù)字媒體的傳送,在客戶端可以邊下載邊觀賞媒體節(jié)目。

      項(xiàng)目結(jié)構(gòu) 服務(wù)器(流媒體檔)-------客戶端機(jī)(播放流媒體檔)

      技術(shù)和實(shí)驗(yàn)平臺(tái):
      Linux構(gòu)建(實(shí)驗(yàn)平臺(tái)的搭建),網(wǎng)絡(luò)編程,應(yīng)用軟件的移植,Qt圖形界面的開(kāi)發(fā)。
      ARM --- Mini2410
        PC機(jī)(windows 系統(tǒng)),linux虛擬平臺(tái),linux 系統(tǒng)RedHat 5,RedHat9
      項(xiàng)目流程: 需求分析----概要設(shè)計(jì)------詳細(xì)設(shè)計(jì)-----編程-----測(cè)試項(xiàng)目----修改完善

      過(guò)程:
      實(shí)驗(yàn)平臺(tái)的搭建,bootloader的燒寫(xiě),內(nèi)核的燒寫(xiě)到flash,網(wǎng)絡(luò)檔系統(tǒng)的制作。
      mplayer的移植,在linux x86上交叉編譯mplayer,使得mplayer.能在ARM上運(yùn)行。
      服務(wù)器的搭建:搭建windows或linux 流媒體服務(wù)器,rtsp協(xié)議傳輸流媒體。
      Qt圖形界面的設(shè)計(jì)實(shí)現(xiàn)流媒體在客戶端圖形界面化操作和觀賞。
      Qt的移植。把在linux或window環(huán)境下開(kāi)發(fā)出的QT應(yīng)用程序移植的相應(yīng)的嵌入式平臺(tái)上。
      實(shí)現(xiàn)嵌入式平臺(tái)的流媒體播放,優(yōu)化并改善傳輸性能和質(zhì)量。

       

      項(xiàng)目開(kāi)始篇
      流媒體Mplayer的移植
      關(guān)鍵詞:支持流媒體,能在ARM 平臺(tái)上運(yùn)行

      開(kāi)發(fā)環(huán)境:redhat 5
      內(nèi)核:2.6.18
      Gcc -v 4.1.2

      源碼包的準(zhǔn)備:
      MPlayer-1.0rc1.tar.bz2 #MPlayer source code
      arm-linux-gcc 3.3.2 #交叉編譯器
      live555-latest.tar.gz #live庫(kù)的支持,流媒體功能必要
      libmad-0.15.1b.tar.gz #解碼庫(kù)
      由于MPlayer中默認(rèn)的mp3*是mp3lib,使用的是浮點(diǎn)數(shù)運(yùn)算,相當(dāng)占用CPU資源,故在編譯的時(shí)候可以使用 libmad進(jìn)行音頻輸出,使用之前需要自己手動(dòng)編譯libmad,保證交叉編譯器能夠找到libmad庫(kù)以及頭文件,編譯時(shí)增加--enable- mad就可以了。利用mad解碼mp3文件,可以看到CPU占用率降低到了20%左右

      安裝好解碼庫(kù)到/usr/local/arm /3.3.2/lib
      Tar xzvf libmad-0.15.1.tar.gz 解開(kāi)解碼包
      Cd libmad-0.15.1
      ./configure --enable-fpm=arm --host=arm-linux --disable-shared --disable-debugging --prefix=/usr/local/arm/3.3.2/lib
      Make
      Make install
      這樣就可以看到在 /usr/local/arm/3.3.2/lib目錄下多了include和lib目錄,

      安裝live庫(kù)到 /usr/local/lib/live
      把Liv包拷貝到 /usr/local/lib/live
      Tar zxvf live555-latest.tar.gz
      Cd live
      vim config.armlinux
      修改如下:
      CROSS_COMPILE= arm-linux-
      LINK = $(CROSS_COMPILE)g++ -o
      LIBRARY_LINK = $(CROSS_COMPILE)ld–o
      LIBRARY_LINK_OPTS = $(LINK_OPTS)–r–Bstatic
      保存后退出
      ./genMakefiles armlinux
      Make

      解碼包libmad和流媒體支持包liv都安裝好以后就可以交叉編譯MPlayer 了

      交叉編譯MPlayer  
      確保 export PATH=/usr/local/arm/3.3.2/bin:$PATH 也就是說(shuō)
      Arm-linux-gcc 的版本號(hào)是:3.3.2,并且此交叉編譯器的安裝路徑是在/usr/local/arm/3.3.2/bin下,因?yàn)榕渲糜玫?-cc=arm- linux-gcc
      ./configure --cc=arm-linux-gcc --host-cc=gcc --enable-cross-compile --target=arm-armv4l-linux --enable-linux-devfs --disable-win32 --disable-dvdread --enable-fbdev --disable-mencoder --enable-libavcodec --disable-liba52 --disable-mp3lib --enable-static --enable-live --disable-armv5te --disable-iconv --charset=noconv --enable-mad --enable-ossaudio --with-livelibdir=/usr/local/lib/live--with-extraincdir=/usr/local/arm/3.3.2/arm-linux/sys-include/:/usr/local/arm/3.3.2/lib/include --with-extralibdir=/usr/local/arm/3.3.2/arm-linux/lib:/usr/local/arm/3.3.2/lib/lib

      make
      到這里MPlayer可以說(shuō)是已經(jīng)移植成功了。

      搭建服務(wù)器
      我們用的是darwin服務(wù)器
      準(zhǔn)備安裝服務(wù)器資源包
      DarwinStreamingSrvr5.5.5-Windows 包
      ActivePerl-5.10.1.1007-MSWin32-x86-291969 安裝包
      QuickTimeInstaller  
      解壓DarwinStreamingSrvr5.5.5-Windows 會(huì)自動(dòng)解壓的C盤(pán)DarwinStreamingSrvr目錄
      安裝ActivePerl-5.10.1.1007-MSWin32-x86-291969
      進(jìn)入DarwinStreamingSrvr目錄,雙擊 Install,輸入用戶名和密碼
      打開(kāi)一個(gè)IE瀏覽器,輸入地址:http://127.0.0.1:1220/,輸入相應(yīng)的用戶名和地址。,設(shè)置好媒體文件存放目錄,默認(rèn)在 C:\Program Files\Darwin Streaming Server\Movies目錄下面
      用 QuickTime來(lái)測(cè)試服務(wù)器
      rtsp://127.0.0.1:554/sample_100kbit.mp4
      同樣也可以在 linux下面:
      ./mpalyer rtsp://127.0.0.1:554/sample_100kbit.mp4

      ----------------------------------------------------------
      支持流媒體的視頻文件mp4 ,可以用MP4Box處理普通mp4文件,使之支持流媒體。處理方法是:
      解壓MP4Box,并把它放入相應(yīng)的文件夾,同時(shí)把MP4視頻文件也放進(jìn)來(lái),在dos 下進(jìn)行如下命令
      MP4Box fileName -hint
      這樣這個(gè)文件就可以支持流媒體播放了。
      ----------------------------------------------------------
      到現(xiàn)在為止,我們已經(jīng)完成了實(shí)驗(yàn)環(huán)境的搭建,mplayer的移植,
      以及Windows DarwinServer服務(wù)器的搭建,現(xiàn)在我們已經(jīng)可以在ARM板上通過(guò)流媒體的方式播放windows DarwinServer里的視頻了,流媒體的功能基本上實(shí)現(xiàn),但是做為一個(gè)完整的應(yīng)用軟件,肯定要有操作界面。接下來(lái) 具體來(lái)介紹一下在QT中調(diào)用MPlayer。

      應(yīng)該來(lái)說(shuō),用QT專(zhuān)門(mén)編寫(xiě)操作界面是一件比較簡(jiǎn)單的事情。但是如果要在QT調(diào)用MPlayer,實(shí)現(xiàn)大部分功能卻是一件并不容易的事情。接下來(lái)我詳細(xì)的說(shuō)明一下MPlayer的實(shí)現(xiàn):

      根據(jù)播放流媒體文件的特點(diǎn)
      ./mpalyer rtsp://127.0.0.1:554/sample_100kbit.mp4
      我們必須在QT上獲取服務(wù)器端的文件名。
      難點(diǎn)一:獲取服務(wù)器端媒體文件目錄里的文件名。
      難點(diǎn)二:如何在QT中調(diào)用MPlay
      -----------------------------
      我獲取服務(wù)器端文件列表的方法實(shí)現(xiàn)如下,我認(rèn)為這樣還是一種比較好的方法:

      ------------------------------------------------------------------------------------------------------------

       

      QT調(diào)用MPlayer應(yīng)用程序的編寫(xiě)

      在編寫(xiě)之前由于沒(méi)有編寫(xiě)過(guò)調(diào)用外部應(yīng)用程序的QT程序,所以一開(kāi)始就覺(jué)得可能比較難,但是當(dāng)我把相關(guān)的資料下載過(guò)來(lái),憑借自己對(duì)QT的熟悉應(yīng)用,一路走過(guò)來(lái)都十分的順利,萬(wàn)事開(kāi)頭難!
      在QT的編寫(xiě)過(guò)程中用到一個(gè)非常重要的類(lèi):
      Qproces 創(chuàng)建一個(gè)進(jìn)程
      --------------------------播放功能的實(shí)現(xiàn)代碼 -----------------------------------
        process->write("quit\n");
        process = new QProcess(this);
      connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(back_message_slots()));
      process->setProcessChannelMode(QProcess::MergedChannels);
        // fname = ui->listWidget->selectedItems()[0]->text();
        Info.id = 1;
        Info.fName = ui->listWidget->selectedItems()[0]->text();
        QStringList args;
        args<<"-slave";
        args<<"-quiet";
        args<<"-wid"<<QString::number(ui->frame->winId());
      -----------------------------------------------------------------------------------------

      播放部分詳解:
      process->write("quit\n"); 先關(guān)閉原來(lái)的進(jìn)程
      process = new QProcess(this); 創(chuàng)建一個(gè)新的進(jìn)程
      connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(back_message_slots())); 信號(hào)與曹鏈接,有新進(jìn)程創(chuàng)建就會(huì)觸發(fā)
      readyReadStandardOutput()信號(hào),獲取新播放文件的信息。
      Info.fName = ui->listWidget->selectedItems()[0]->text(); 獲取文件名
      QStringList args;
      args<<"-slave";
      args<<"-quiet";
      args<<"-wid"<<QString::number(ui->frame->winId());
      args<<Info.fName;
      // 以上為linux播放必須參數(shù)
      播放函數(shù):
      process->start(mplayerPath+"/mplayer",args);
      參數(shù)一:應(yīng)用軟件mplayer的存放路徑,我把它存放在項(xiàng)目文件夾里
      參數(shù)二:為播放媒體文件的參數(shù)
      ------------------------------------------------------------------------------------


      ----------------------------- 以下是我的Widget.cpp的實(shí)現(xiàn)部分--------------
      #Include "widget.h"
      #Include "ui_widget.h"
      #Include <QPainter>
      #Include <QPalette>
      #Include <dirent.h>
      #Include <QFileDialog>
      #Include <QStringList>
      #Include <QListWidgetItem>
      #Include "titlebar.h"

      Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
      {
        ui->setupUi(this);
        ui->gridLayout->setMargin(0);
        ui->gridLayout->setSpacing(0);
        this->setWindowTitle(tr("My Mplayer"));

        ui->frame_2->setAutoFillBackground(true);
        QPalette palette;
        palette.setBrush(ui->frame_2->backgroundRole(),QBrush(QPixmap(":/down")));
        ui->frame_2->setPalette(palette);

        ui->frame->setMinimumWidth(this->width()-ui->tabWidget->width());
        ui->videoSlider->setMinimumWidth(this->width());
        ui->tabWidget->hide();
        ui->soundSlider->hide();

        ui->quit->setToolTip(tr("停止"));
        ui->prebtn->setToolTip(tr("上一集"));
        ui->next->setToolTip(tr("下一集"));
        ui->play_stop->setToolTip(tr("播放/暫停"));
        ui->list->setToolTip(tr("打開(kāi)播放列表"));

        // ui->listWidget->setStyleSheet("color:red");
        connect(ui->listWidget,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(getlist()));
        connect(ui->listWidget_2,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(getlofileList()));
        process = new QProcess(this);
        char buff[40];
        mplayerPath = getcwd(buff,40);

        i = 0;
        s = 0;

        isPlay = true;
      isStop = false;
      connect(ui->videoSlider,SIGNAL(sliderMoved(int)),this,SLOT(seek_video(int)));
        connect(ui->soundSlider,SIGNAL(valueChanged(int)),this,SLOT(seek_volum(int)));

        ui->videoSlider->setRange(0,100);
        ui->soundSlider->setRange(0,10);
        ui->soundSlider->setValue(5);

        timer = new QTimer(this);

        connect(timer,SIGNAL(timeout()),this,SLOT(get_time_slots()));
        timer->start(1000);

        ui->label->setStyleSheet("color:rgb(182, 182, 182)");
        ui->label3->setStyleSheet("color:rgb(182, 182, 182)");
        ui->label->setText("00:00:00");
        ui->label3->setText("00:00:00");
      }

      Widget::~Widget()
      {
        delete ui;
      }

      void Widget::changeEvent(QEvent *e)
      {
        QWidget::changeEvent(e);
        switch (e->type()) {
        case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
        default:
        break;
        }
      }

      void Widget::on_list_clicked()
      {
        if(i == 0)
        {
        ui->tabWidget->show();

        }
        else if(i == 1)
        {
        ui->tabWidget->hide();
        }
        i++ ;
        if(i==2)
        i=0;
      }



      void Widget::on_sound_clicked()
      {

        ui->soundSlider->show();
        if(s == 0)
        {
        ui->soundSlider->show();

        }
        else if(s == 1)
        {
        ui->soundSlider->hide();
        }
        s++ ;
        if(s==2)
        s=0;
      }

      //---------------------------------- 獲取本地列表-----------------------------
      void Widget::getlofileList()
      {
        int lo = ui->listWidget_2->currentRow();
        if(lo == 0) //點(diǎn)擊選擇獲取列表
        {
        QStringList lofn=QFileDialog::getOpenFileNames(
        this,
        tr("選擇視頻文件"),
        "/",
        "*.*");
        int tmp;
        for(tmp = 0;tmp<lofn.size();tmp++)
        {
        qDebug()<<lofn.at(tmp);
        QListWidgetItem *loItem = new QListWidgetItem(lofn.at(tmp));
        ui->listWidget_2->addItem(loItem);
        }
        }
        else
        {
        process->write("quit\n");
        process = new QProcess(this);
        connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(back_message_slots()));
        process->setProcessChannelMode(QProcess::MergedChannels);

        Info.id=0;
        Info.fName = ui->listWidget_2->selectedItems()[0]->text();
        // fname = ui->listWidget_2->selectedItems()[0]->text();

        QStringList args;
        args<<"-slave";
        args<<"-quiet";
        args<<"-wid"<<QString::number(ui->frame->winId());
        // if(0)
        // {
        // args<<fname;//本地播放
        args<<Info.fName;
        // }
        // qDebug()<<fname;

        // args<<LIVE+fname;//流媒體播放
        process->setProcessChannelMode(QProcess::MergedChannels);

        // Box.setTitletxt(tr("正在播放電影--")+Info.fName);
        // Box.set_titleBartxt(tr("正在播放電影--")+Info.fName);
        // this->setWindowTitle(tr("正在播放電影--")+fname);
        // label3->setText(tr("正在緩沖-----請(qǐng)稍等--"));
        // TitleBar::setTitletxt(tr("正在播放電影--")+fname);
        process->start(mplayerPath+"/mplayer",args);

        // timer2->start(7000);
        // connect(process,SIGNAL(readyReadStandardOutput()),play,SIGNAL(clicked()));

        // getbuffing();

        // QIcon ic;
        // ic.addPixmap(QPixmap(":/play_stop"));
        ui->play_stop->setStyleSheet("background-image:url(:/play_stop)");
        // ui->play_stop->setIcon(ic);
        // isPlay=true;

        }
      }

      //--------------------------------獲取在線列表-------

        void Widget::getlist()
        {
        int ck = ui->listWidget->currentRow();

        if(ck == 0)
        {
        int listf;
        qDebug()<<count;
        for(listf=count;listf>0;listf--)
        {
        ui->listWidget->takeItem(listf);
        }
        getfileName();
        QString fn;
        int listf1;
        for(listf1=0;listf1<count;listf1++)
        {
        fn = cFile_name[listf1];
        QListWidgetItem *items = new QListWidgetItem(fn);
        ui->listWidget->addItem(items);
        }
        }
        else
        {
        process->write("quit\n");
        process = new QProcess(this);
        connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(back_message_slots()));
        process->setProcessChannelMode(QProcess::MergedChannels);
        // fname = ui->listWidget->selectedItems()[0]->text();
        Info.id = 1;
        Info.fName = ui->listWidget->selectedItems()[0]->text();
        QStringList args;
        args<<"-slave";
        args<<"-quiet";
        args<<"-wid"<<QString::number(ui->frame->winId());
        if(0)
        {
        args<<"/home/Movies/"+fname;//本地播放
        }
        // args<<LIVE+fname;//流媒體播放
        args<<LIVE+Info.fName;
        process->setProcessChannelMode(QProcess::MergedChannels);
        // this->setWindowTitle(tr("正在播放電影--")+fname);
        // label3->setText(tr("正在緩沖-----請(qǐng)稍等--"));
        // TitleBar::setTitletxt(tr("正在播放電影--")+fname);
        process->start(mplayerPath+"/mplayer",args);

        // timer2->start(7000);
        // connect(process,SIGNAL(readyReadStandardOutput()),play,SIGNAL(clicked()));
        // getbuffing();
        // QIcon ic;
        // ic.addPixmap(QPixmap(":/play_stop"));
        ui->play_stop->setStyleSheet("background-image:url(:/play_stop)");
        // ui->play_stop->setIcon(ic);
        // isPlay=true;

        }

      }

      void Widget::on_play_stop_clicked()
      {
        if(!isPlay)//如果不是播放中
        {
        if(isStop)//如果所停止?fàn)顟B(tài)
        {
        if(Info.id == 0)//如果是在播放本地的電影
        {
        if(ui->listWidget_2->currentRow() == 0)
        {
        ui->listWidget_2->setCurrentRow(1);
        }
        Info.fName = ui->listWidget_2->currentItem()->text();
        QStringList args;
        args<<"-slave";
        args<<"-quiet";
        args<<"-wid"<<QString::number(ui->frame->winId());
        args<<Info.fName;//流媒體播放
        process->setProcessChannelMode(QProcess::MergedChannels);
        // this->setWindowTitle(tr("正在播放電影--")+fname);
        process->start(mplayerPath+"/mplayer",args);

        }
        else if(Info.id == 1)//如果所在播放在線電影
        {
        if(ui->listWidget->currentRow()==0)//播放當(dāng)前電影
        {ui->listWidget->setCurrentRow(1);}
        // fname = ui->listWidget->currentItem()->text();
        Info.fName = ui->listWidget->currentItem()->text();
        QStringList args;
        args<<"-slave";
        args<<"-quiet";
        args<<"-wid"<<QString::number(ui->frame->winId());
        // args<<MOVIES+fname;
        if(0)
        {
        args<<MOVIES+fname;//本地播放
        }
        // args<<LIVE+fname;//流媒體播放

        args<<LIVE+Info.fName;
        process->setProcessChannelMode(QProcess::MergedChannels);
        // this->setWindowTitle(tr("正在播放電影--")+fname);
        process->start(mplayerPath+"/mplayer",args);
        }
        // label3->hide();
        // getbuffing();
        isStop=false;
        }
        else//如果是暫停狀態(tài)
        {
        process->write("pause\n");

        }
        // QIcon ic;
        // ic.addPixmap(QPixmap(":/play_stop"));
        // ui->play_stop->setIcon(ic);
        ui->play_stop->setStyleSheet("background-image:url(:/play_stop)");
        isPlay = true;

        }
        else//如果所播放狀態(tài)
        {
        // ui->play_stop->setIcon(QIcon(":/stop"));
        isPlay = false;
        ui->play_stop->setStyleSheet("background-image:url(:/stop)");
        process->write("pause\n");


        }
      }

      //------------------------------------ 上一首-----------------------------------------

      void Widget::on_prebtn_clicked()
      {
        QStringList args;
        args<<"-slave";
        args<<"-quiet";
        args<<"-wid"<<QString::number(ui->frame->winId());

        if(Info.id == 0)//正在播放本地,就播放本地列表的上一首
        {
        if((ui->listWidget_2->currentRow()-1)>0)//如果在有效范圍內(nèi)
        {
        ui->listWidget_2->setCurrentRow(ui->listWidget_2->currentRow()-1);
        Info.fName = ui->listWidget_2->currentItem()->text();
        args<<Info.fName;

        process->setProcessChannelMode(QProcess::MergedChannels);
        // this->setWindowTitle(tr("正在播放電影--")+fname);
        process->write("quit\n");
        process = new QProcess(this);
        connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(back_message_slots()));
        process->setProcessChannelMode(QProcess::MergedChannels);
        process->start(mplayerPath+"/mplayer",args);

        }
        }
        else if(Info.id == 1)//如果在播放在線列表 獲取上一集
        {

        if((ui->listWidget->currentRow()-1)>0)
        {
        ui->listWidget->setCurrentRow(ui->listWidget->currentRow()-1);
        // fname = ui->listWidget->currentItem()->text();
        Info.fName = ui->listWidget->currentItem()->text();
        if(0)
        {
        args<<MOVIES+fname;//本地播放
        }
        args<<LIVE+Info.fName;//流媒體播放
        process->setProcessChannelMode(QProcess::MergedChannels);
        // this->setWindowTitle(tr("正在播放電影--")+fname);
        process->write("quit\n");
        process = new QProcess(this);
        connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(back_message_slots()));
        process->setProcessChannelMode(QProcess::MergedChannels);
        process->start(mplayerPath+"/mplayer",args);

        }
        }
      }

      //-----------------------------------下一首 ---------------------------------------

      void Widget::on_next_clicked()
      {

        QStringList args;
        args<<"-slave";
        args<<"-quiet";
        args<<"-wid"<<QString::number(ui->frame->winId());

        if(Info.id == 0)//在播放本地的電影,播放下一首
        {
        qDebug()<<ui->listWidget_2->count()<<"看到了嗎?";

        if(ui->listWidget_2->currentRow()+1 < ui->listWidget_2->count())
        {
        ui->listWidget_2->setCurrentRow(ui->listWidget_2->currentRow()+1);
        }
        Info.fName = ui->listWidget_2->currentItem()->text();
        args<<Info.fName;

        process->write("quit\n");
        process = new QProcess(this);
        connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(back_message_slots()));
        process->setProcessChannelMode(QProcess::MergedChannels);
        process->start(mplayerPath+"/mplayer",args);


        }
        else if(Info.id == 1)//如果所在線播放
        {
        if((ui->listWidget->currentRow()+1)<=count)//:--?? 哈哈,第0位條目被占用了
        {
        ui->listWidget->setCurrentRow(ui->listWidget->currentRow()+1);
        Info.fName = ui->listWidget->currentItem()->text();

        // args<<MOVIES+fname;
        if(0)
        {
        args<<MOVIES+fname;//本地播放
        }
        args<<LIVE+Info.fName;//流媒體播放

        // this->setWindowTitle(tr("正在播放電影--")+fname);
        process->write("quit\n");
        process = new QProcess(this);
        connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(back_message_slots()));
        process->setProcessChannelMode(QProcess::MergedChannels);
        process->start(mplayerPath+"/mplayer",args);
        }
        }
      }


      void Widget::on_quit_clicked()
      {
        if(!isStop)//如果原來(lái)不是停止的,按下就會(huì)停止,如果原來(lái)本來(lái)就所停止的,按下什么都不作
        {
        // play->setIcon(QIcon(":/stop"));
        ui->play_stop->setStyleSheet("background-image:url(:/stop)");
        process->write("quit\n");
        isStop = true;
        isPlay = false;
        }
      }

      void Widget::seek_video(int k)
      {
        qDebug()<<k;
        if(process && process->state()==QProcess::Running)
        {
        process->write(QString("seek " + QString::number(k) + " 1\n"));
        }
      }

      void Widget::seek_volum(int sk)
      {
        if(sk>5)
        {
        process->write(QString("volume "+QString::number(sk-5)+"\n").toAscii());
        }
        if(sk<5)
        {
        process->write(QString("volume "+QString::number(sk-5)+"\n").toAscii());
        }

      }

      void Widget::get_time_slots()
      {
        if(isPlay)
        {
        process->write("get_time_pos\n");
        process->write("get_time_length\n");
        }
      }

      void Widget::back_message_slots()
      {
        while(process->canReadLine())
        {
        QString message(process->readLine());
        // qDebug()<<message;
        QStringList message_list = message.split("=");
        // qDebug()<<"list[0]" << message_list[0];

        if(message_list[0]=="ANS_TIME_POSITION")
        {
        curr_time = message_list[1].toDouble();
        // qDebug()<<"curr_time="<<curr_time;
        QTime time = int_to_time(curr_time);
        ui->label->setText(time.toString("hh:mm:ss"));
        ui->videoSlider->setValue(100*curr_time/file_length);
        }
        else if(message_list[0] == "ANS_LENGTH")
        {
        file_length = message_list[1].toDouble();
        QTime time = int_to_time(file_length);
        ui->label3->setText(time.toString("hh:mm:ss"));
        }
        }

      }

      QTime Widget::int_to_time(int seconds)
      {
        int sec = 0,min =0,hour = 0;
        QTime time;
        if(seconds < 60)
        {
        sec = seconds;
        min = 0;
        hour = 0;
        }
        if(seconds>=60 && seconds<3600)
        {
        sec = seconds%60;
        min = seconds/60;
        hour = 0;
        }
        if(seconds >=3600)
        {
        sec = seconds%60;
        min = (seconds /60)%60;
        hour = seconds /3600;
        }
        time.setHMS(hour,min,sec);
        return time;
      }

      全年征稿/資訊合作 聯(lián)系郵箱:1271141964@qq.com

      免責(zé)聲明

      • 凡本網(wǎng)注明"來(lái)源:智能制造網(wǎng)"的所有作品,版權(quán)均屬于智能制造網(wǎng),轉(zhuǎn)載請(qǐng)必須注明智能制造網(wǎng),http://towegas.com。違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
      • 企業(yè)發(fā)布的公司新聞、技術(shù)文章、資料下載等內(nèi)容,如涉及侵權(quán)、違規(guī)遭投訴的,一律由發(fā)布企業(yè)自行承擔(dān)責(zé)任,本網(wǎng)有權(quán)刪除內(nèi)容并追溯責(zé)任。
      • 本網(wǎng)轉(zhuǎn)載并注明自其它來(lái)源的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類(lèi)作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品來(lái)源,并自負(fù)版權(quán)等法律責(zé)任。
      • 如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

      <
      更多 >

      工控網(wǎng)機(jī)器人儀器儀表物聯(lián)網(wǎng)3D打印工業(yè)軟件金屬加工機(jī)械包裝機(jī)械印刷機(jī)械農(nóng)業(yè)機(jī)械食品加工設(shè)備制藥設(shè)備倉(cāng)儲(chǔ)物流環(huán)保設(shè)備造紙機(jī)械工程機(jī)械紡織機(jī)械化工設(shè)備電子加工設(shè)備水泥設(shè)備海洋水利裝備礦冶設(shè)備新能源設(shè)備服裝機(jī)械印染機(jī)械制鞋機(jī)械玻璃機(jī)械陶瓷設(shè)備橡塑設(shè)備船舶設(shè)備電子元器件電氣設(shè)備


      我要投稿
      • 投稿請(qǐng)發(fā)送郵件至:(郵件標(biāo)題請(qǐng)備注“投稿”)1271141964.qq.com
      • 聯(lián)系電話0571-89719789
      工業(yè)4.0時(shí)代智能制造領(lǐng)域“互聯(lián)網(wǎng)+”服務(wù)平臺(tái)
      智能制造網(wǎng)APP

      功能豐富 實(shí)時(shí)交流

      智能制造網(wǎng)小程序

      訂閱獲取更多服務(wù)

      微信公眾號(hào)

      關(guān)注我們

      抖音

      智能制造網(wǎng)

      抖音號(hào):gkzhan

      打開(kāi)抖音 搜索頁(yè)掃一掃

      視頻號(hào)

      智能制造網(wǎng)

      公眾號(hào):智能制造網(wǎng)

      打開(kāi)微信掃碼關(guān)注視頻號(hào)

      快手

      智能制造網(wǎng)

      快手ID:gkzhan2006

      打開(kāi)快手 掃一掃關(guān)注
      意見(jiàn)反饋
      關(guān)閉
      企業(yè)未開(kāi)通此功能
      詳詢(xún)客服 : 0571-87858618