当前位置: 首页 > news >正文

国外网站怎么注册厦门外贸网站制作

国外网站怎么注册,厦门外贸网站制作,十一月新闻大事件摘抄,ui培训机构排行榜文章目录 QT实现在线流媒体播放平台简介开发视频ffmpeg下载SimpleVideoPlayer.hSimpleVideoPlayer.cpp 开发音频添加功能打开文件夹播放暂停播放上下一首选择倍速 效果展示项目下载 QT实现在线流媒体播放平台 简介 Qt是一种流行的C开发框架#xff0c;它提供了用于构建图形用… 文章目录 QT实现在线流媒体播放平台简介开发视频ffmpeg下载SimpleVideoPlayer.hSimpleVideoPlayer.cpp 开发音频添加功能打开文件夹播放暂停播放上下一首选择倍速 效果展示项目下载 QT实现在线流媒体播放平台 简介 Qt是一种流行的C开发框架它提供了用于构建图形用户界面GUI和跨平台应用程序的工具和库。Qt具有广泛的应用范围可以用于开发桌面应用程序、移动应用程序和嵌入式系统等。Qt具有丰富的多媒体功能包括音频和视频处理能力。 在使用Qt进行在线流媒体开发时我们可以结合FFmpeg和QMediaPlayer来实现强大的音视频处理和播放功能。首先可以使用FFmpeg解码音视频文件或流提取音频和视频数据。然后可以使用QMediaPlayer加载音频和视频数据并通过其播放控制接口实现音视频的同步播放。此外可以使用Qt的图形界面开发能力创建用户友好的界面显示视频内容并提供交互控制。 开发视频 FFmpeg是一个开源的多媒体框架它提供了一套用于处理音视频的工具和库。FFmpeg支持广泛的音视频格式和编解码器能够对音视频进行解码、编码、转换和处理等操作。在在线流媒体应用中FFmpeg通常用于处理音视频文件或流提取其中的音频和视频数据进行解码和编码以及应用特效和滤镜等。 ffmpeg下载 如果你的qt版本是32位下载的FFmpeg是64位则可能识别不了函数 在这里我提供了64位和32位的FFmpeg下载链接 32位链接 https://pan.baidu.com/s/1wBAv6yYYa_9n64wzmHdO2w 提取码0703 64位链接 https://pan.baidu.com/s/1aEHWpbTQkhVA30KtfviYjA 提取码0703 SimpleVideoPlayer.h #ifndef SIMPLEVIDEOPLAYER_H #define SIMPLEVIDEOPLAYER_H#include QThread #include QMainWindow #include QImageextern C {#include libavcodec/avcodec.h#include libavformat/avformat.h#include libavutil/pixfmt.h#include libswscale/swscale.h#include libavutil/imgutils.h }class SimpleVideoPlayer : public QThread {Q_OBJECTpublic:explicit SimpleVideoPlayer();~SimpleVideoPlayer();void setVideo(const QString videoPath){this-_videoPath videoPath;}inline void play();enum class PlayerState {Playing,Paused,Stopped};void togglePlayPause();void changeState();void setPlaybackSpeed(QString speed); signals:void sigCreateVideoFrame(QImage image);protected:void run();private:QString _videoPath;PlayerState _state PlayerState::Playing;QString speedVideo 1x; };#endif // SIMPLEVIDEOPLAYER_H SimpleVideoPlayer.cpp #include SimpleVideoPlayer.h #include iostream #include QDebugSimpleVideoPlayer::SimpleVideoPlayer() {}SimpleVideoPlayer::~SimpleVideoPlayer() {}void SimpleVideoPlayer::play() {start(); }void SimpleVideoPlayer::togglePlayPause() {if (_state PlayerState::Playing) {_state PlayerState::Paused;} else {_state PlayerState::Playing;} }void SimpleVideoPlayer::changeState() {if(_state PlayerState::Playing || _state PlayerState::Paused){_state PlayerState::Stopped;} }void SimpleVideoPlayer::setPlaybackSpeed(QString speed) {speedVideo speed; }void SimpleVideoPlayer::run() {_state PlayerState::Playing;if (_videoPath.isNull()){return;}char *file1 _videoPath.toUtf8().data();//编解码器的注册最新版本不需要调用//av_register_all();//描述多媒体文件的构成及其基本信息AVFormatContext *pAVFormatCtx avformat_alloc_context();if (avformat_open_input(pAVFormatCtx, file1, NULL, NULL) ! 0){std::coutopen file failstd::endl;avformat_free_context(pAVFormatCtx);return;}//读取一部分视音频数据并且获得一些相关的信息if (avformat_find_stream_info(pAVFormatCtx, NULL) 0){std::coutavformat find stream failstd::endl;avformat_close_input(pAVFormatCtx);return;}int iVideoIndex -1;for (uint32_t i 0; i pAVFormatCtx-nb_streams; i){//视频流if (pAVFormatCtx-streams[i]-codecpar-codec_type AVMEDIA_TYPE_VIDEO){iVideoIndex i;break;}}if (iVideoIndex -1){std::coutvideo stream not findstd::endl;avformat_close_input(pAVFormatCtx);return;}//获取视频流的编解码器上下文的数据结构AVCodecContext *pAVCodecCtx avcodec_alloc_context3(NULL);if (!pAVCodecCtx) {fprintf(stderr, Could not allocate codec context\n);exit(1);}if (avcodec_parameters_to_context(pAVCodecCtx, pAVFormatCtx-streams[iVideoIndex]-codecpar) 0) {fprintf(stderr, Could not copy codec parameters\n);exit(1);}//编解码器信息的结构体const AVCodec *pAVCodec avcodec_find_decoder(pAVCodecCtx-codec_id);if (pAVCodec NULL){std::coutnot find decoderstd::endl;return;}//初始化一个视音频编解码器if (avcodec_open2(pAVCodecCtx, pAVCodec, NULL) 0){std::coutavcodec_open2 failstd::endl;return;}//AVFrame 存放从AVPacket中解码出来的原始数据AVFrame *pAVFrame av_frame_alloc();AVFrame *pAVFrameRGB av_frame_alloc();//用于视频图像的转换,将源数据转换为RGB32的目标数据SwsContext *pSwsCtx sws_getContext(pAVCodecCtx-width, pAVCodecCtx-height, pAVCodecCtx-pix_fmt,pAVCodecCtx-width, pAVCodecCtx-height, AV_PIX_FMT_RGB32,SWS_BICUBIC, NULL, NULL, NULL);int iNumBytes av_image_get_buffer_size(AV_PIX_FMT_RGB32, pAVCodecCtx-width, pAVCodecCtx-height,1);uint8_t *pRgbBuffer (uint8_t *)(av_malloc(iNumBytes * sizeof(uint8_t)));//为已经分配的空间的结构体AVPicture挂上一段用于保存数据的空间av_image_fill_arrays(pAVFrameRGB-data, pAVFrameRGB-linesize, pRgbBuffer, AV_PIX_FMT_RGB32, pAVCodecCtx-width, pAVCodecCtx-height,1);//AVpacket 用来存放解码之前的数据AVPacket packet;av_new_packet(packet, pAVCodecCtx-width * pAVCodecCtx-height);//读取码流中视频帧while (av_read_frame(pAVFormatCtx, packet) 0){if (_state PlayerState::Stopped) {qDebug()当前音乐已终止;break;}if (_state PlayerState::Paused) {QThread::msleep(600); // Sleep for 600ms 线程休息continue;}if (packet.stream_index ! iVideoIndex){av_packet_unref(packet);continue;}// 发送数据包到解码器if (avcodec_send_packet(pAVCodecCtx, packet) 0){std::cout Error sending packet for decoding. std::endl;av_packet_unref(packet);continue;}// 从解码器接收解码后的帧while (avcodec_receive_frame(pAVCodecCtx, pAVFrame) 0){// 转换像素格式sws_scale(pSwsCtx, (uint8_t const * const *)pAVFrame-data, pAVFrame-linesize, 0, pAVCodecCtx-height, pAVFrameRGB-data, pAVFrameRGB-linesize);// 构造QImageQImage img(pRgbBuffer, pAVCodecCtx-width, pAVCodecCtx-height, QImage::Format_RGB32);// 绘制QImageemit sigCreateVideoFrame(img);}av_packet_unref(packet);double fps av_q2d(pAVFormatCtx-streams[iVideoIndex]-r_frame_rate);int delay 900.0 / fps;if(speedVideo 2x){msleep(delay / 2);}else if(speedVideo 0.5x){msleep(delay * 2);}else{msleep(delay);}//msleep(15);}//资源回收/*av_free(pAVFrame);av_free(pAVFrameRGB);sws_freeContext(pSwsCtx);avcodec_close(pAVCodecCtx);avformat_close_input(pAVFormatCtx);*/av_frame_free(pAVFrame);av_frame_free(pAVFrameRGB);sws_freeContext(pSwsCtx);avcodec_free_context(pAVCodecCtx);avformat_close_input(pAVFormatCtx);} 开发音频 QMediaPlayer是Qt自带的多媒体播放器类它提供了简单易用的接口用于播放音频和视频文件。QMediaPlayer支持多种音视频格式并且可以通过网络流式传输音视频内容。它具有播放、暂停、停止、跳转和调整音量等常见的播放控制功能。此外QMediaPlayer还提供了信号和槽机制可用于捕获播放状态的变化和处理用户交互事件。 MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui-setupUi(this);this-setWindowTitle(在线播放平台);//comboBox 数据居中ui-comboBox-setStyleSheet(QComboBox QAbstractItemView { text-align: center; });/*QMediaPlayer * m_player;m_player new QMediaPlayer(this);QString strPlayer D:/QT.study/onlinePlay/qiFengLe;m_player-setMedia(QUrl::fromLocalFile(strPlayer));m_player-setVolume(50);m_player-play();*///QPushButton *openFileButton new QPushButton(打开文件, this);//setCentralWidget(openFileButton);connect(ui-openFileButton, QPushButton::clicked, this, MainWindow::openFileDialog);_simpleVp new SimpleVideoPlayer();// 创建媒体播放器player new QMediaPlayer;//_simpleAp new audioPlayer();connect(_simpleVp,SIGNAL(sigCreateVideoFrame(QImage)),this,SLOT(sigGetVideoFrame(QImage)));connect(ui-Slider,QSlider::valueChanged,this,MainWindow::changeAudio);connect(ui-startBtn,QPushButton::clicked,this,MainWindow::startPlay);connect(ui-pauseButton , QPushButton::clicked, this-_simpleVp, SimpleVideoPlayer::togglePlayPause);connect(ui-boxBS, QComboBox::currentTextChanged, this, MainWindow::onSpeedChanged);//下一首歌曲connect(ui-nextButton,QPushButton::clicked,this-_simpleVp,SimpleVideoPlayer::changeState);connect(ui-nextButton,QPushButton::clicked,this,MainWindow::nextVideo);//上一首歌曲connect(ui-previousBtn,QPushButton::clicked,this-_simpleVp,SimpleVideoPlayer::changeState);connect(ui-previousBtn,QPushButton::clicked,this,MainWindow::previousVideo);//暂停播放connect(ui-pauseButton,QPushButton::clicked,this,MainWindow::pauseAudio);//增加MV曲目ui-comboBox-addItem(起风了----------买辣椒也用券);ui-comboBox-addItem(悬溺------------葛东琪);ui-comboBox-addItem(平凡之路--------朴树);ui-comboBox-addItem(把回忆拼好给你---------王贰浪);ui-comboBox-addItem(带我去找夜生活---------告五人);//增加倍速ui-boxBS-addItem(1x);ui-boxBS-addItem(0.5x);ui-boxBS-addItem(2x);connect(this, MainWindow::speedChanged, _simpleVp, SimpleVideoPlayer::setPlaybackSpeed);//视频文件路径videoStr[起风了----------买辣椒也用券] D:/QT.music/video/qifengle.mkv;videoStr[平凡之路--------朴树] D:/QT.music/video/pingfanzhilu.mkv;videoStr[带我去找夜生活---------告五人] D:/QT.music/video/yeshenghuo.mkv;videoStr[把回忆拼好给你---------王贰浪] D:/QT.music/video/huiyi.mkv;videoStr[悬溺------------葛东琪] D:/QT.music/video/xuanni.mkv;//音乐文件路径audioStr[起风了----------买辣椒也用券] D:/QT.music/audio/qifengle1.mp3;audioStr[平凡之路--------朴树] D:/QT.music/audio/pingfanzhilu.mp3;audioStr[带我去找夜生活---------告五人] D:/QT.music/audio/yeshenghuo.mp3;audioStr[把回忆拼好给你---------王贰浪] D:/QT.music/audio/huiyi.mp3;audioStr[悬溺------------葛东琪] D:/QT.music/audio/xuanni.mp3;QIcon icon;icon.addFile(tr(:/qrs/4.png));ui-pauseButton-setIconSize(QSize(120,40));ui-pauseButton-setIcon(icon); }MainWindow::~MainWindow() {delete ui;delete _simpleVp;delete player; }void MainWindow::startPlay() {//获得当前选择歌曲QString Str ui-comboBox-currentText();qDebug()Str;// 加载音乐文件QString currentAudio audioStr[Str];// player-setMedia(QUrl::fromLocalFile(currentAudio));//0~100音量范围,默认是100ui-Slider-setValue(50);player-setVolume(50);// 加载视频文件QString currentVideo videoStr[Str];//_simpleVp-setVideo(currentVideo);/*_simpleAp-setAudio(D:/QT.study/onlinePlay/qifengle1.mp3);开始播放QThread类的成员函数_simpleAp-start();*///开始播放player-play();_simpleVp-start();}因为需要里面需要打开的文件位置所以打开时需要更改位置 添加功能 我们目前只是完成了打开视频和音频的功能还需要完善一下功能 打开文件夹播放暂停播放下一首歌曲开启倍速模式开启调节音量模式 打开文件夹 void MainWindow::openFileDialog() {//QString filePath QFileDialog::getOpenFileName(this, Open Song, , Audio Files (*.mp3 *.wav);;All Files (*));QString filePath QFileDialog::getOpenFileName(this, Open Video, , Video Files (*.mp4 *.avi *.mkv *.mov);;All Files (*));ui-openFilePath-setText(filePath);if (!filePath.isEmpty()){// 这里处理用户选择的歌曲例如将其传递给播放器等。qDebug() Selected song: filePath;_simpleVp-setVideo(filePath);QString str;for(auto it videoStr.begin();it ! videoStr.end();it){if(it-second filePath){str it-first;break;}}player-setMedia(QUrl::fromLocalFile(audioStr[str]));} }播放暂停 void MainWindow::pauseAudio() {QIcon icon;if (player-state() QMediaPlayer::PlayingState) {icon.addFile(tr(:/qrs/3.png));player-pause();//ui-pauseButton-setText(Play);ui-pauseButton-setIconSize(QSize(120,40));ui-pauseButton-setStyleSheet(background-color: transparent;);ui-pauseButton-setFlat(true);ui-pauseButton-setIcon(icon);} else {icon.addFile(tr(:/qrs/4.png));player-play();//ui-pauseButton-setText(Pause);ui-pauseButton-setIconSize(QSize(120,40));ui-pauseButton-setStyleSheet(background-color: transparent;);ui-pauseButton-setFlat(true);ui-pauseButton-setIcon(icon);} } 播放上下一首 void MainWindow::nextVideo() //播放下一首歌曲 {int idx 0;QString fileStr ui-openFilePath-text();for(auto it videoStr.begin();it ! videoStr.end();it){if(it-second fileStr){break;}idx;}idx (idx 1) % 5;int idx1 idx;QString videoFile; // (videoStr.begin() idx)-second;QString audioFile; // (audioStr.begin() idx)-second;for(auto it videoStr.begin();it ! videoStr.end();it){if(idx 0){videoFile it-second;break;}idx--;}for(auto it audioStr.begin();it ! audioStr.end();it){if(idx1 0){audioFile it-second;break;}idx1--;}ui-openFilePath-setText(videoFile);_simpleVp-setVideo(videoFile);player-setMedia(QUrl::fromLocalFile(audioFile));_simpleVp-start();player-play(); }//实现上一首歌曲功能 void MainWindow::previousVideo() {int idx 0;QString fileStr ui-openFilePath-text();for(auto it videoStr.begin();it ! videoStr.end();it){if(it-second fileStr){break;}idx;}idx (idx - 1 5) % 5;int idx1 idx;QString videoFile; // (videoStr.begin() idx)-second;QString audioFile; // (audioStr.begin() idx)-second;for(auto it videoStr.begin();it ! videoStr.end();it){if(idx 0){videoFile it-second;break;}idx--;}for(auto it audioStr.begin();it ! audioStr.end();it){if(idx1 0){audioFile it-second;break;}idx1--;}ui-openFilePath-setText(videoFile);_simpleVp-setVideo(videoFile);player-setMedia(QUrl::fromLocalFile(audioFile));_simpleVp-start();player-play(); }选择倍速 void MainWindow::onSpeedChanged() //选择不同倍速时会给视频和音频发射信号 {QString SpeedStr ui-boxBS-currentText();if(SpeedStr 2x){player-setPlaybackRate(2.0);}else if(SpeedStr 0.5x){player-setPlaybackRate(0.5);}else {player-setPlaybackRate(1.0);}emit speedChanged(SpeedStr); }效果展示 项目下载 GitHub下载 https://github.com/Shy2593666979/onlinePlay 百度网盘下载 链接https://pan.baidu.com/s/11NaEgQIrj-Z1FLzbyGcL-w 提取码0703 歌曲文件下载 链接https://pan.baidu.com/s/1qs3CmqWdPT6XrFlY039ULQ 提取码0703 更多资料尽在 GitHub 欢迎各位读者去Star ⭐学术交流群Q 754410389 持续更新中~~~
http://www.yutouwan.com/news/321191/

相关文章:

  • 做网站刷点击最新新闻十条
  • 怎样投网站广告哪里有做营销型网站的公司
  • 网站备案需要哪些资料未来销售最好的行业
  • 简要说明开发网站的步骤网站建设方案及报
  • 汕头网站快速优化排名wordpress apply_filter
  • 网站建设的目标和需求分析wordpress表情无插件
  • 网站开发先写后端先写前端江苏住房城乡建设网站
  • 网站推广方法有哪些石家庄造价信息网官网
  • 域名备案网站建设方案ui设计好学吗?要学多久
  • php mysql 企业网站源码前台登录 wordpress
  • 网站建设高端设计网络推广关键词优化公司
  • 建站公司技术服务费西安百度竞价外包
  • 清远医院网站建设方案wordpress读法
  • 怎么做外语网站网络推广网站建设有限公司
  • 网站栏目怎么做301定向wordpress5 升级
  • 加盟餐饮网站建设腾讯云服务器网站域名备案
  • wordpress如何站点合肥优化排名推广
  • 微博网站认证 备案名称网站建设虚拟主机说明
  • 南通网站建设祥云先进网站建设有哪些
  • 做网站能赚钱吗知乎商务网站建设实训心得
  • 做微网站的第三方平台有哪些推广码怎么填
  • 忻州宁武网站建设wordpress 设置数据库
  • 泸州市建设局网站国内网页设计欣赏
  • wordpress 站点语言html框架布局实例代码
  • 建设彩票网站犯法吗装修设计师在哪里找
  • 免费自助建站平台系统公司黄页是官网吗
  • 中国建设银行官网首页 网站一般通过会社员
  • 用php开发网站教程广西建设厅官方网站
  • 网站模板下载湖南岚鸿网站免费网络爬虫网站
  • 三优科技 网站开发php建站系统哪个好