国产免费一区二区三区最新不卡_gogo全球大胆高清人露出91_国产无遮挡一区二区三区毛片日本_免费淫视频_俄罗斯16一20sex牲色另类_免费观看黄色片视频

您現在的位置:智能制造網>技術中心>ARM + Qt + mplayer 開發過程

直播推薦

更多>

企業動態

更多>

推薦展會

更多>

ARM + Qt + mplayer 開發過程

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

嵌入式技術:按照PC機的特點,根據特定的應用用需要,通過裁剪軟硬件而組成的可以獨立運行的系統的一門計算機技術。

流媒體的產生:隨著 Niternet寬帶化的發展趨勢,高速的實時傳輸已成為實現,傳統的多媒體在網絡上客戶端必須把多媒體檔全部下載完畢后,在客戶端才能播放,而流媒體以流的形式進行數字媒體的傳送,在客戶端可以邊下載邊觀賞媒體節目。

項目結構 服務器(流媒體檔)-------客戶端機(播放流媒體檔)

技術和實驗平臺:
Linux構建(實驗平臺的搭建),網絡編程,應用軟件的移植,Qt圖形界面的開發。
ARM --- Mini2410
  PC機(windows 系統),linux虛擬平臺,linux 系統RedHat 5,RedHat9
項目流程: 需求分析----概要設計------詳細設計-----編程-----測試項目----修改完善

過程:
實驗平臺的搭建,bootloader的燒寫,內核的燒寫到flash,網絡檔系統的制作。
mplayer的移植,在linux x86上交叉編譯mplayer,使得mplayer.能在ARM上運行。
服務器的搭建:搭建windows或linux 流媒體服務器,rtsp協議傳輸流媒體。
Qt圖形界面的設計實現流媒體在客戶端圖形界面化操作和觀賞。
Qt的移植。把在linux或window環境下開發出的QT應用程序移植的相應的嵌入式平臺上。
實現嵌入式平臺的流媒體播放,優化并改善傳輸性能和質量。

 

項目開始篇
流媒體Mplayer的移植
關鍵詞:支持流媒體,能在ARM 平臺上運行

開發環境:redhat 5
內核:2.6.18
Gcc -v 4.1.2

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

安裝好解碼庫到/usr/local/arm /3.3.2/lib
Tar xzvf libmad-0.15.1.tar.gz 解開解碼包
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庫到 /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 也就是說
Arm-linux-gcc 的版本號是:3.3.2,并且此交叉編譯器的安裝路徑是在/usr/local/arm/3.3.2/bin下,因為配置用到--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可以說是已經移植成功了。

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

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

應該來說,用QT專門編寫操作界面是一件比較簡單的事情。但是如果要在QT調用MPlayer,實現大部分功能卻是一件并不容易的事情。接下來我詳細的說明一下MPlayer的實現:

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

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

 

QT調用MPlayer應用程序的編寫

在編寫之前由于沒有編寫過調用外部應用程序的QT程序,所以一開始就覺得可能比較難,但是當我把相關的資料下載過來,憑借自己對QT的熟悉應用,一路走過來都十分的順利,萬事開頭難!
在QT的編寫過程中用到一個非常重要的類:
Qproces 創建一個進程
--------------------------播放功能的實現代碼 -----------------------------------
  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"); 先關閉原來的進程
process = new QProcess(this); 創建一個新的進程
connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(back_message_slots())); 信號與曹鏈接,有新進程創建就會觸發
readyReadStandardOutput()信號,獲取新播放文件的信息。
Info.fName = ui->listWidget->selectedItems()[0]->text(); 獲取文件名
QStringList args;
args<<"-slave";
args<<"-quiet";
args<<"-wid"<<QString::number(ui->frame->winId());
args<<Info.fName;
// 以上為linux播放必須參數
播放函數:
process->start(mplayerPath+"/mplayer",args);
參數一:應用軟件mplayer的存放路徑,我把它存放在項目文件夾里
參數二:為播放媒體文件的參數
------------------------------------------------------------------------------------


----------------------------- 以下是我的Widget.cpp的實現部分--------------
#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("打開播放列表"));

  // 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) //點擊選擇獲取列表
  {
  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("正在緩沖-----請稍等--"));
  // 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("正在緩沖-----請稍等--"));
  // 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)//如果所停止狀態
  {
  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)//播放當前電影
  {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//如果是暫停狀態
  {
  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//如果所播放狀態
  {
  // 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)//如果在有效范圍內
  {
  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)//如果原來不是停止的,按下就會停止,如果原來本來就所停止的,按下什么都不作
  {
  // 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;
}

全年征稿/資訊合作 聯系郵箱:[email protected]

免責聲明

  • 凡本網注明"來源:智能制造網"的所有作品,版權均屬于智能制造網,轉載請必須注明智能制造網,http://m.lfljgfsj.com。違反者本網將追究相關法律責任。
  • 企業發布的公司新聞、技術文章、資料下載等內容,如涉及侵權、違規遭投訴的,一律由發布企業自行承擔責任,本網有權刪除內容并追溯責任。
  • 本網轉載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品來源,并自負版權等法律責任。
  • 如涉及作品內容、版權等問題,請在作品發表之日起一周內與本網聯系,否則視為放棄相關權利。

<
更多 >

工控網機器人儀器儀表物聯網3D打印工業軟件金屬加工機械包裝機械印刷機械農業機械食品加工設備制藥設備倉儲物流環保設備造紙機械工程機械紡織機械化工設備電子加工設備水泥設備海洋水利裝備礦冶設備新能源設備服裝機械印染機械制鞋機械玻璃機械陶瓷設備橡塑設備船舶設備電子元器件電氣設備


我要投稿
  • 投稿請發送郵件至:(郵件標題請備注“投稿”)1271141964.qq.com
  • 聯系電話0571-89719789
工業4.0時代智能制造領域“互聯網+”服務平臺
智能制造網APP

功能豐富 實時交流

智能制造網小程序

訂閱獲取更多服務

微信公眾號

關注我們

抖音

智能制造網

抖音號:gkzhan

打開抖音 搜索頁掃一掃

視頻號

智能制造網

公眾號:智能制造網

打開微信掃碼關注視頻號

快手

智能制造網

快手ID:gkzhan2006

打開快手 掃一掃關注
意見反饋
關閉
企業未開通此功能
詳詢客服 : 0571-87858618
主站蜘蛛池模板: 欧洲精品色| 久久蜜桃香蕉精品一区二区三区 | 黄色一级片免费在线观看 | 欧美性a视频 | 91精品国产91久久久久久丝袜 | chinese乱子伦xxxx国语对白 | 日本欧美一区二区三区视频麻豆 | 高清国产福利 | 久久国产成人午夜av浪潮 | 成人福利在线看 | 免费欧美一级视频 | 午夜a狂野欧美一区二区 | 亚洲欧美国产精品va在线观看 | 久久伊| 免费观看一级黄色片 | 羞羞视频免费网站 | 久久免费视频在线 | 国产一区二精品区在线 | 日本精品视频一区二区三区四区 | 4480午夜| 亚洲性在线视频 | 天堂二区 | 日韩视频一区 | 香蕉视频破解 | 91av在线免费视频 | av在线免费播放网站 | 一级免费特黄视频 | 国产美女白浆 | 露脸各种姿势啪啪的清纯美女 | 99综合视频 | 日本网站一区二区三区 | 免费网站看v片在线a | 免费国产在线视频 | 天天草夜夜 | hd欧美free性xxxx护土 | 99视频有精品视频高清 | 免费观看高清视频网站 | 欧美一级片免费在线观看 | 国产精品刺激对白麻豆99 | 久久久久久久久91 | 午夜精品成人一区二区 |