-
UID:82611
-
- 注册时间2009-07-24
- 最后登录2010-03-08
- 在线时间53小时
-
- 发帖36
- 搜Ta的帖子
- 精华0
- 金钱360
- 威望46
- 贡献值0
- 好评度36
-
访问TA的空间加好友用道具
|
    這只是一個class,是用 gnu gpl發布 這有源碼可download,舊的程式碼寫的不好 新的源碼放上去了(v0.050是改寫過的) http://sites.google.com/site/yplinlinux/- #include "add_video.h"
- #include "ui_add_video.h"
- add_video::add_video(int i,QWidget *parent) :
- QWidget(parent),
- m_ui(new Ui::add_video)
- {
- //i=0初始化空物件 play_id=0
- //i=1初始化net radio play_id=1
- //i=2初始化net tv play_id=2
- //i=3初始化local music play_id=3
- //i=4初始化local video play_id=4
- //i=5初始化play cd play_id=5
- m_ui->setupUi(this);
- play_id=0; //play id
- int_play_id=i;
- is_start_play_local=true; //這是給按play後就設成false
- connect_i=0;
- play_music_number=0;
- is_play_music=false;
- is_play_video=false;
- is_play_cd=false;
- is_play_vcd=false;
- this->set_lcd_color(4);
- switch(i){
- case 1: //net radio
- {
- media = new Phonon::MediaObject;
- Phonon::VolumeSlider *volumeSlider=new Phonon::VolumeSlider;
- //volumeSlider->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
- //media->setCurrentSource(Phonon::MediaSource("./test.mpeg")); //放mp3
- Phonon::AudioOutput *aOutput = new Phonon::AudioOutput(Phonon::VideoCategory);
- Phonon::createPath(media, aOutput);
- volumeSlider->setAudioOutput(aOutput);
- m_ui->horizontalLayout->addWidget(volumeSlider);
- massageframe=new massage_frame;
- m_ui->gridLayout_2->addWidget(massageframe);
- is_play_music=false;
- is_play_video=false;
- break;}
- case 2: //net tv
- {
- media = new Phonon::MediaObject;
- Phonon::VolumeSlider *volumeSlider=new Phonon::VolumeSlider;
- volumeSlider->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
- //media->setCurrentSource(Phonon::MediaSource("./test.mpeg")); //放mp3
- vwidget = new Phonon::VideoWidget(this);
- vwidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto);
- ///////////////////////////////////esc跳出全影幕///////////////////////////////////////////////
- //vwidget->setShortcutEnabled(0,true);
- QAction *at = new QAction(tr("&New"), vwidget);
- vwidget->addAction(at);
- vwidget->setAcceptDrops(true);
- at->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::Key_MediaStop));
- connect(at, SIGNAL(triggered()), vwidget, SLOT(exitFullScreen()));
- /////////////////////////////////////////////////////////////////////////////////////////////
- Phonon::createPath(media, vwidget);
- Phonon::AudioOutput *aOutput = new Phonon::AudioOutput(Phonon::VideoCategory);
- Phonon::createPath(media, aOutput);
- m_ui->gridLayout_2->addWidget(vwidget);
- volumeSlider->setAudioOutput(aOutput);
- Phonon::SeekSlider *seekSlider= new Phonon::SeekSlider;
- seekSlider->setMediaObject(media);
- m_ui->horizontalLayout->addWidget(seekSlider);
- m_ui->horizontalLayout->addWidget(volumeSlider);
- is_play_music=false;
- is_play_video=false;
- break;}
- case 3: //播放音樂
- {
- media = new Phonon::MediaObject;
- Phonon::VolumeSlider *volumeSlider=new Phonon::VolumeSlider;
- volumeSlider->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
- Phonon::AudioOutput *aOutput = new Phonon::AudioOutput(Phonon::VideoCategory);
- Phonon::Path path = Phonon::createPath(media,aOutput);
- //Phonon::createPath(media, aOutput);
- volumeSlider->setAudioOutput(aOutput);
- //volumeSlider->setStyleSheet("background-color: rgb(170, 85, 255)");
- Phonon::SeekSlider *seekSlider= new Phonon::SeekSlider;
- seekSlider->setMediaObject(media);
- //seekSlider->setStyleSheet("background-color: rgb(170, 85, 255)");
- //////////////effect/////////////////
- //QList<Phonon::EffectDescription> effectDescriptions =Phonon::BackendCapabilities::availableAudioEffects();
- //Phonon::EffectDescription effectDescription = effectDescriptions.at(4);
- //Phonon::Effect *effect = new Phonon::Effect(effectDescription);
- //path.insertEffect(effect);
- //Phonon::EffectWidget *effectWidget = new Phonon::EffectWidget(effect);
- //effectWidget->show();
- m_ui->horizontalLayout->addWidget(seekSlider);
- m_ui->horizontalLayout->addWidget(volumeSlider);
- massageframe=new massage_frame;
- m_ui->gridLayout_2->addWidget(massageframe);
- is_play_music=true;
- break;}
- case 4: //local video
- {
- media = new Phonon::MediaObject;
- Phonon::VolumeSlider *volumeSlider=new Phonon::VolumeSlider;
- volumeSlider->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
- //media->setCurrentSource(Phonon::MediaSource("./test.mpeg")); //放mp3
- vwidget = new Phonon::VideoWidget(this);
- vwidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto);
- ///////////////////////////////////esc跳出全影幕///////////////////////////////////////////////
- // vwidget->setShortcutEnabled(0,true);
- QAction *at = new QAction(tr("&New"), vwidget);
- vwidget->addAction(at);
- vwidget->setAcceptDrops(true);
- at->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::Key_MediaStop));
- connect(at, SIGNAL(triggered()), vwidget, SLOT(exitFullScreen()));
- //////////////////////////////////////////////////////////////////////////////////////
- ;
- Phonon::createPath(media, vwidget);
- Phonon::AudioOutput *aOutput = new Phonon::AudioOutput(Phonon::VideoCategory);
- Phonon::createPath(media, aOutput);
- m_ui->gridLayout_2->addWidget(vwidget);
- volumeSlider->setAudioOutput(aOutput);
- Phonon::SeekSlider *seekSlider= new Phonon::SeekSlider;
- seekSlider->setMediaObject(media);
- m_ui->horizontalLayout->addWidget(seekSlider);
- m_ui->horizontalLayout->addWidget(volumeSlider);
- is_play_video=true;
- break;}
- case 6://play vcd
- {
- media = new Phonon::MediaObject;
- Phonon::VolumeSlider *volumeSlider=new Phonon::VolumeSlider;
- volumeSlider->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
- media->setCurrentSource(Phonon::Vcd); //放cd
- vwidget = new Phonon::VideoWidget(this);
- vwidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto);
- ///////////////////////////////////esc跳出全影幕///////////////////////////////////////////////
- //vwidget->setShortcutEnabled(0,true);
- QAction *at = new QAction(tr("&New"), vwidget);
- vwidget->addAction(at);
- vwidget->setAcceptDrops(true);
- at->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::Key_MediaStop));
- connect(at, SIGNAL(triggered()), vwidget, SLOT(exitFullScreen()));
- /////////////////////////////////////////////////////////////////////////////////////////////
- Phonon::createPath(media, vwidget);
- Phonon::AudioOutput *aOutput = new Phonon::AudioOutput(Phonon::VideoCategory);
- Phonon::createPath(media, aOutput);
- m_ui->gridLayout_2->addWidget(vwidget);
- volumeSlider->setAudioOutput(aOutput);
- Phonon::SeekSlider *seekSlider= new Phonon::SeekSlider;
- seekSlider->setMediaObject(media);
- m_ui->horizontalLayout->addWidget(seekSlider);
- m_ui->horizontalLayout->addWidget(volumeSlider);
- is_play_vcd=true;
- break;}
- case 5://play cd
- {
- media = new Phonon::MediaObject;
- Phonon::VolumeSlider *volumeSlider=new Phonon::VolumeSlider;
- volumeSlider->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
- media->setCurrentSource(Phonon::Cd); //放cd
- Phonon::AudioOutput *aOutput = new Phonon::AudioOutput(Phonon::VideoCategory);
- Phonon::createPath(media, aOutput);
- volumeSlider->setAudioOutput(aOutput);
- Phonon::SeekSlider *seekSlider= new Phonon::SeekSlider;
- seekSlider->setMediaObject(media);
- m_ui->horizontalLayout->addWidget(seekSlider);
- m_ui->horizontalLayout->addWidget(volumeSlider);
- is_play_cd=true;
- break;}
- }
- if(i !=0){//非初始化空物件
- QTimer *timer = new QTimer;
- timer->start(1000);
- connect(timer, SIGNAL(timeout()), this, SLOT(inf()));//一定要用this
- }
- }
- void add_video::set_video_screen_model(int i)
- {
- if((play_id==2 or play_id==4 or play_id==6) ){
- switch(i)
- {
- case 1:
- {
- vwidget->setAspectRatio(Phonon::VideoWidget::AspectRatio16_9);
- break;
- }
- case 2:
- {
- vwidget->setAspectRatio(Phonon::VideoWidget::AspectRatio4_3);
- break;
- }
- }
- }
- }
- void add_video::set_full_screen()
- {
- if((play_id==2 or play_id==4 or play_id==6) ){
- this->vwidget->enterFullScreen();
- }
- }
- void add_video::exit_full_screen()
- {
- if(play_id==2 or play_id==4){
- this->vwidget->exitFullScreen();
- }
- }
- void add_video::stop_video()
- {
- media->stop();
- is_play_video=false;
- is_play_music=false;
- //if(is_start_play_local && is_play_music){play_music_number=0;}//local時按停止,重頭播放
- }
- void add_video::replay_video()
- {
- if( play_id==3 || play_id==4)
- {
- media->stop();
- media->setCurrentSource(media_local_list_source.at(0));
- media->play();
- play_music_number=0; //local時按停止,重頭播放
- }
- }
- void add_video::play_video()
- {
- //開始播放且是play cd
- if(is_start_play_local && (is_play_cd or is_play_vcd or is_play_music or is_play_video))
- {
- connect(media, SIGNAL(tick(qint64)), this, SLOT(tickk(qint64)));
- is_start_play_local=false;
- }
- play_id=int_play_id; //按play才設play_id
- media->play();
- is_play_music=true;
- }
- void add_video::pause_video()
- {
- media->pause();
- }
- void add_video::up_music()
- {
- if( this->get_play_music_number()>0 )
- {
- this->stop_video();
- this->set_play_music_number( this->get_play_music_number()-1); //-1後設給 add_video number
- this->set_local_media_source( this->get_play_music_number()); //注意這不能減1,因為這是新的,設給 add_video source
- this->play_video();
- }
- }
- void add_video::down_music()
- {
- if( this->get_play_music_number() < this->get_play_music_total_number()-1 )
- {
- this->stop_video();
- this->set_play_music_number( this->get_play_music_number()+1); //-1後設給 add_video number
- this->set_local_media_source( this->get_play_music_number()); //注意這不能減1,因為這是新的,設給 add_video source
- this->play_video();
- }
- }
- //設net media source
- void add_video::set_video_source(QString str)
- {
- media->setCurrentSource(Phonon::MediaSource(str)); //source
- net_source_name=str;
- }
- //設local media source
- void add_video::set_local_media_source(int i)
- {
- this->media->setCurrentSource(this->media_local_list_source.at(i));
- }
- //取得當前歌曲編號
- int add_video::get_play_music_number()
- {
- return this->play_music_number;
- }
- //取得當前歌曲總數
- int add_video::get_play_music_total_number()
- {
- return this->media_local_list_source.size();
- }
- //設定當前歌曲編號
- void add_video::set_play_music_number(int i)
- {
- this->play_music_number=i;
- }
- //clear media
- void add_video::clear_video()
- {
- //已知一些DECORDER播放rm,用clear會有BUG
- media->stop();
- media->clearQueue(); //source
- //media->clear();
- media->disconnect();
- }
- /////////////////設定media source////////////////////////////////////////////
- void add_video::set_local_media_source(Phonon::MediaSource source)
- {
- this->media->setCurrentSource(Phonon::MediaSource(source)); //source
- }
- //return play id
- int add_video::get_play_id()
- {
- return this->play_id;
- }
- ///retur current media
- bool add_video::is_media_Seekable()
- {
- return this->media->isSeekable();
- }
- //set media source list
- void add_video::set_local_media_list(QList<Phonon::MediaSource> source)
- {
- this->media_local_list_source=source;
- }
- bool add_video::is_local_play(){
- if(play_id==3){return true;}else{return false;}
- }
- //設label
- void add_video::set_lable_text(QString str)
- {
- m_ui->label->setText(str);
- }
- add_video::~add_video()
- {
- delete m_ui;
- }
- void add_video::changeEvent(QEvent *e)
- {
- QWidget::changeEvent(e);
- switch (e->type()) {
- case QEvent::LanguageChange:
- m_ui->retranslateUi(this);
- break;
- default:
- break;
- }
- }
- void add_video::on_add_video_destroyed()
- {
- this->close();
- this->destroyed();
- }
- //////////////////////資訊slot,容易BUG要注意////////////////////////////////////////////////
- void add_video::inf()
- {
- // connect(media, SIGNAL(bufferStatus(int)), this, SLOT(cache(int)));
- bool wascaching = media->state() == Phonon::BufferingState; //cache
- bool wasplaying = media->state() == Phonon::PlayingState; //play
- bool wasconnecting = media->state() == Phonon::LoadingState; //load
- bool wasstoping = media->state() == Phonon::StoppedState; //stop
- bool waspauseing = media->state() == Phonon::PausedState; //pause
- bool waserroring = media->state() == Phonon::ErrorState; //error
- bool waserroring1 = media->errorType() == Phonon::NormalError;
- bool waserroring2 = media->errorType() == Phonon::NoError;
- bool waserroring3 = media->errorType() == Phonon::FatalError;
- //Phonon::State newState;
- if ( wascaching || wasplaying || wasstoping || waspauseing || waserroring )
- {
- if (wasplaying)
- {
- //歌曲名稱
- QString state_str=QString::fromUtf8(" 播放中........");
- m_ui->label->setText(state_str);
- if(play_id ==1){
- QString state_str=QString::fromUtf8("正在收聽 : \n");
- QString s=net_source_name;//source url name
- state_str.append(s);
- massageframe->set_lable_text(state_str);
- }
- if(is_play_music && play_id == 3){
- QString state_str=QString::fromUtf8("正在播放 : \n");
- QString s=media_local_list_source.at(play_music_number).fileName();
- emit set_music_tab(play_music_number);//發送信號,當前第幾首
- state_str.append(s);
- massageframe->set_lable_text(state_str);
- }
- if(is_play_music && play_id == 4){
- emit set_music_tab(play_music_number);//發送信號,當前第幾首
- }
- }
- if (wascaching)
- {
- connect(media, SIGNAL(bufferStatus(int)), this, SLOT(cache(int)));
- }
- if (wasstoping)
- {
- QString str=QString::number(media_local_list_source.size());
- QString str1=QString::number(play_music_number);
- QString state_str=QString::fromUtf8("播放停止 ........");
- state_str.append(str);
- state_str.append(" : ");
- state_str.append(str1);
- m_ui->label->setText(state_str);
- if((play_id==3&& is_play_music) or(is_play_video && play_id==4)){
- play_music_number++;
- if(play_music_number+1 > media_local_list_source.size() )
- {media->stop();play_music_number=0;is_play_music=false;} //停止
- else{
- media->setCurrentSource(media_local_list_source.at(play_music_number));//指定source
- media->play();
- is_play_music=true;
- }
- }
- }
- if (waspauseing)
- {
- QString state_str=QString::fromUtf8("播放暫停 ........");
- m_ui->label->setText(state_str);
- }
- if (waserroring )
- {
- QString state_str=QString::fromUtf8("連接錯誤,可能是重複太多play........");
- m_ui->label->setText(state_str);
- }
- }
- else
- {
- if (waserroring2)
- {
- connect_i++;
- QString str=QString::number(connect_i);
- QString state_str;
- if( connect_i< 120)
- {
- state_str=QString::fromUtf8("連接中,請耐心等待, ........");
- }else{
- state_str=QString::fromUtf8("連接不上,可能是網路塞車或網址不對,試其他位置看看.");
- }
- state_str.append(str);
- m_ui->label->setText(state_str);
- }
- }
- }
- void add_video::cache(int i)
- {
- QString str=QString::number(i);
- QString state_str=QString::fromUtf8("%連接緩衝中 ........");
- m_ui->label->setText(str.append(state_str));
- }
- /////////////////LCD TIME/////////////////////////////////
- void add_video::tickk(qint64 t)
- {
- QTime displayTime(0, (t / 60000) % 60, (t / 1000) % 60);
- m_ui->lcdNumber->display(displayTime.toString("mm:ss"));
- }
- //設定lcd time style///////////////////////////////////////////
- void add_video::set_lcd_color(int i){
- //QRadialGradient gradient(50,50, 50, 50, 50);
- //gradient.setColorAt(0, QColor::fromRgbF(0, 1, 0, 1));
- //gradient.setColorAt(1, QColor::fromRgbF(0, 0, 0, 0));
- //gradient.setColorAt(0, Qt::blue);
- //QBrush brush(gradient); //筆刷
- QPalette palette;
- switch(i)
- {
- case 1:palette.setBrush(QPalette::Light, Qt::cyan);break;
- case 2:palette.setBrush(QPalette::Light, Qt::darkCyan);break;
- case 3:palette.setBrush(QPalette::Light, Qt::darkRed);break;
- case 4:palette.setBrush(QPalette::Light, Qt::black);break;
- case 5:palette.setBrush(QPalette::Light, Qt::darkYellow);break;
- case 6:palette.setBrush(QPalette::Light, Qt::darkMagenta);break;
- }
- //palette.setBrush(QPalette::Light, Qt::cyan);//Qt::darkCyan//Qt::darkRed//Qt::black//Qt::red//Qt::cyan
- //palette.setBrush(QPalette::Light, brush);
- m_ui->lcdNumber->setPalette(palette);
- /////////////////////////////////////////////////////////////////
- }
[ 此帖被john123在2009-12-26 17:24重新编辑 ]
|