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

有没有做问卷还能赚钱的网站现在流行做网站吗

有没有做问卷还能赚钱的网站,现在流行做网站吗,如何搭建高访问量的网站,外贸网站建设推广公司价格在前面的文章中#xff0c;我们使用libvlc_media_player_set_hwnd设置了视频的显示的窗口。 libvlc_media_player_set_hwnd(vlc_mediaPlayer, (void *)ui.widgetShow-winId()); 如果我们想要提取每一帧数据#xff0c;将数据保存到本地#xff0c;该如何操作呢#x…在前面的文章中我们使用libvlc_media_player_set_hwnd设置了视频的显示的窗口。 libvlc_media_player_set_hwnd(vlc_mediaPlayer, (void *)ui.widgetShow-winId()); 如果我们想要提取每一帧数据将数据保存到本地该如何操作呢答案肯定是有的。 默认情况下VLC 会使用自己的渲染机制来显示视频。但如果你想要在自己的应用程序中处理视频帧例如进行视频编辑、分析或其他自定义渲染可以使用 libvlc_video_set_callbacks 来指定自定义的回调函数。 以下是libvlc_video_set_callbacks函数声明。 LIBVLC_API void libvlc_video_set_callbacks( libvlc_media_player_t *mp,libvlc_video_lock_cb lock,libvlc_video_unlock_cb unlock,libvlc_video_display_cb display,void *opaque ); mp是指向libvlc_media_player_t的指针代表一个媒体播放器实例。lock是一个回调函数当VLC需要访问视频帧时会被调用。unlock是一个回调函数当VLC完成对视频帧的处理后会被调用。display是一个回调函数用于显示视频帧。opaque是一个用户数据指针会被传递给上述回调函数。 以下是libvlc_video_lock_cb声明。 typedef void *(*libvlc_video_lock_cb)(void *opaque, void **planes); opaque是一个用户数据指针libvlc_video_set_callbacks最后一个参数会传递给lock。planes是一个指向指针的指针它指向一个指针数组每个指针指向一个视频平面对于 YUV 格式通常有三个平面Y、U 和 V。对于 RGB 格式通常只有一个平面。返回值传递给unlock的参数2。 如果应用程序需要在视频渲染前对视频帧进行一些处理那么可以在libvlc_video_lock_cb中进行这些处理并将处理后的帧数据地址赋值给 *planes。 以下是libvlc_video_unlock_cb声明。 typedef void (*libvlc_video_unlock_cb)(void *opaque, void *picture,void *const *planes); opaque是一个用户数据指针libvlc_video_set_callbacks最后一个参数会传递给lock。picture是libvlc_video_lock_cb返回值。planes是平面像素数据。 在打开一个新的视频文件的时候我们不知道视频的宽和高等数据。这时候需要使用libvlc_video_set_format_callbacks来获取视频格式函数声明如下。 LIBVLC_API void libvlc_video_set_format_callbacks( libvlc_media_player_t *mp,libvlc_video_format_cb setup,libvlc_video_cleanup_cb cleanup ); mp是指向libvlc_media_player_t 的指针代表一个媒体播放器实例。setup是一个回调函数用于设置视频像素格式和缓冲区配置。cleanup是一个回调函数用于清理视频像素格式和缓冲区配置。 以下是libvlc_video_format_cb声明用于在视频解码开始之前设置视频像素格式和缓冲区配置。 typedef unsigned (*libvlc_video_format_cb)(void **opaque, char *chroma,unsigned *width, unsigned *height,unsigned *pitches,unsigned *lines); opaque调用libvlc_video_set_callbacks时指定可以被传递给回调函数用于存储应用程序特定的数据。chroma是一个指向字符数组的指针用于返回像素格式例如 “RGBA” 或 “YUV420P”。width和height返回视频帧宽度和高度。pitches返回每个视频平面对于 YUV 格式通常有三个平面Y、U 和 V的行跨度即一行像素所占的字节数。lines返回每个视频平面的行数。 代码示例保存指定的数据帧。 头文件。 #pragma once#include QtWidgets/QWidget #include ui_showWidget.h #include QMenu #include QActionGroup #include vlc/vlc.h #include QDebug #include QFileDialog #include QThread #include QMouseEvent #include QKeyEventenum Rate {Rate2X,Rate1_5X,Rate1_25X,Rate1_0X,Rate0_75X,Rate0_5X };class showWidget : public QWidget {Q_OBJECTpublic:showWidget(QWidget *parent nullptr);~showWidget();private slots:void slotOpenFile();void slotPlay();void slotPause();void slotStop();void slotValueChanged(int value);void slotCurrentIndexChanged(int index);private://事件处理回调static void vlcEvents(const libvlc_event_t *ev, void *param);private:Ui::showWidgetClass ui;private:libvlc_instance_t *vlc_base nullptr;libvlc_media_t *vlc_media nullptr;libvlc_media_player_t *vlc_mediaPlayer nullptr;QListfloat m_lstRate;QListQString m_lstAudioDevice; };cpp文件。  #include showWidget.h #include QTimer #include QTime #include QMutex #include stdlib.h #pragma execution_character_set(utf-8)struct Frame {int width;int height;uchar * pixels;QMutex mutex; };int g_frameNum 0; static Frame *g_frame nullptr;// 自定义视频输出模块的回调函数 static void *lock(void *opaque, void **planes) {g_frame-mutex.lock();*planes g_frame-pixels;return 0; }//保存100~110帧 static void unlock(void *opaque, void *picture, void *const *planes) {// 这里可以释放视频帧的锁if (g_frameNum 100 g_frameNum 110){char *buffer (char *)*planes; //planes即为帧数据QImage image((unsigned char*)buffer, g_frame-width, g_frame-height, QImage::Format_ARGB32);QString filePath;filePath.sprintf(./img%d.jpg, g_frameNum);image.save(filePath);}g_frameNum;g_frame-mutex.unlock(); }static void display(void *opaque, void *picture) {// 这里可以进行视频帧的显示或其他处理(void)opaque; }static unsigned setup(void **opaque, char *chroma,unsigned *width, unsigned *height,unsigned *pitches,unsigned *lines) {qDebug() chroma: QString(chroma) width: *width , height: *height;/* 开辟存放图像数据的内存块 */if (g_frame){if (g_frame-pixels){delete[] g_frame-pixels;g_frame-pixels NULL;}delete g_frame;g_frame NULL;}int w *width;int h *height;g_frame new Frame;g_frame-pixels new uchar[w * h * 4]; // 申请大小也为4通道的像素memset(g_frame-pixels, 0, w * h * 4);memcpy(chroma, RV32, 4);g_frame-width w;g_frame-height h;*pitches w * 4;*lines h;return 1; }showWidget::showWidget(QWidget *parent): QWidget(parent) {ui.setupUi(this);this-setWindowTitle(视频播放器);vlc_base libvlc_new(0, NULL);ui.cbxRate-setCurrentIndex(Rate1_0X);m_lstRate 2.0 1.5 1.25 1.0 0.75 0.5;ui.btnOpen-setFocusPolicy(Qt::NoFocus);ui.btnPlay-setFocusPolicy(Qt::NoFocus);ui.btnPause-setFocusPolicy(Qt::NoFocus);ui.btnStop-setFocusPolicy(Qt::NoFocus);ui.hSliderVolumn-setFocusPolicy(Qt::NoFocus);ui.cbxRate-setFocusPolicy(Qt::NoFocus);connect(ui.btnOpen, QPushButton::clicked, this, showWidget::slotOpenFile);connect(ui.btnPlay, QPushButton::clicked, this, showWidget::slotPlay);connect(ui.btnPause, QPushButton::clicked, this, showWidget::slotPause);connect(ui.btnStop, QPushButton::clicked, this, showWidget::slotStop);connect(ui.hSliderVolumn, QSlider::valueChanged, this, showWidget::slotValueChanged);connect(ui.cbxRate,SIGNAL(currentIndexChanged(int)), this, SLOT(slotCurrentIndexChanged(int))); }showWidget::~showWidget() {libvlc_release(vlc_base); //减少libvlc实例的引用计数并销毁 }void showWidget::slotOpenFile() {/*选择文件*/QString filename QFileDialog::getOpenFileName(this, 选择打开的文件, D:/, tr(*.*));std::replace(filename.begin(), filename.end(), QChar(/), QChar(\\));vlc_media libvlc_media_new_path(vlc_base, filename.toUtf8().data());if (!vlc_media) {return;}// 创建libvlc实例和媒体播放器vlc_mediaPlayer libvlc_media_player_new_from_media(vlc_media);if (!vlc_mediaPlayer) {return;}libvlc_video_set_format_callbacks(vlc_mediaPlayer, setup, NULL);// 设置自定义视频输出libvlc_video_set_callbacks(vlc_mediaPlayer, lock, unlock, display, NULL);// 等待元数据加载完成libvlc_media_parse(vlc_media);// 获取各种元数据const char *title libvlc_media_get_meta(vlc_media, libvlc_meta_Title);const char *artist libvlc_media_get_meta(vlc_media, libvlc_meta_Artist);const char *album libvlc_media_get_meta(vlc_media, libvlc_meta_Album);const char *url libvlc_media_get_meta(vlc_media, libvlc_meta_URL);const char *date libvlc_media_get_meta(vlc_media, libvlc_meta_Date);const char *lang libvlc_media_get_meta(vlc_media, libvlc_meta_Language);int duration libvlc_media_get_duration(vlc_media); // 获取时长单位毫秒qDebug(Title: %s, title ? title : N/A);qDebug(Artist: %s, artist ? artist : N/A);qDebug(Album: %s, album ? album : N/A);qDebug(Duration: %d ms, duration);qDebug(url: %s, url ? url : N/A);qDebug(date: %s, date ? date : N/A);qDebug(lang: %s, lang ? lang : N/A);libvlc_media_track_t **tracks;int track_count libvlc_media_tracks_get(vlc_media,tracks);for (unsigned i 0; i track_count; i) {libvlc_media_track_t* track tracks[i];// 显示轨道信息printf(Track #%u: %s\n, i, track-psz_description);// 这里可以获取到每一个轨道的信息比如轨道类型 track-i_type// 可能是 libvlc_track_video, libvlc_track_audio 或者 libvlc_track_text (字幕)if (track-i_type libvlc_track_video) {// 处理视频轨道信息qDebug(width %d,track-video-i_width);qDebug(height %d, track-video-i_height);qDebug(rate_num %d, track-video-i_frame_rate_num);qDebug(rate_den %d, track-video-i_frame_rate_den);}else if (track-i_type libvlc_track_audio) {// 处理音频轨道信息qDebug(channels %d, track-audio-i_channels);qDebug(rate %d, track-audio-i_rate);}else if (track-i_type libvlc_track_text) {// 处理字幕轨道信息}}//获取事件管理器libvlc_event_manager_t *em libvlc_media_player_event_manager(vlc_mediaPlayer);// 注册事件监听器libvlc_event_attach(em, libvlc_MediaPlayerTimeChanged, vlcEvents, this);libvlc_event_attach(em, libvlc_MediaPlayerEndReached, vlcEvents, this);libvlc_event_attach(em, libvlc_MediaPlayerStopped, vlcEvents, this);libvlc_event_attach(em, libvlc_MediaPlayerPlaying, vlcEvents, this);libvlc_event_attach(em, libvlc_MediaPlayerPaused, vlcEvents, this);QTimer::singleShot(1000, this, showWidget::slotPlay);libvlc_video_filter_list_get(vlc_base); }void showWidget::slotPlay() {if (vlc_mediaPlayer){libvlc_media_player_play(vlc_mediaPlayer);} }void showWidget::slotPause() {if (vlc_mediaPlayer)libvlc_media_player_pause(vlc_mediaPlayer); }void showWidget::slotStop() {if (vlc_mediaPlayer)libvlc_media_player_stop(vlc_mediaPlayer); }void showWidget::slotValueChanged(int value) {if (vlc_mediaPlayer)libvlc_audio_set_volume(vlc_mediaPlayer, value); }void showWidget::slotCurrentIndexChanged(int index) {if (vlc_mediaPlayer)libvlc_media_player_set_rate(vlc_mediaPlayer, m_lstRate[index]); }//事件回调 void showWidget::vlcEvents(const libvlc_event_t *ev, void *param) {showWidget *w (showWidget*)param;//处理不同的事件switch (ev-type) {case libvlc_MediaPlayerTimeChanged:{//qDebug() VLC媒体播放器时间已更改;qint64 len libvlc_media_player_get_time(w-vlc_mediaPlayer);libvlc_time_t lenSec len / 1000;libvlc_time_t totalLen libvlc_media_player_get_length(w-vlc_mediaPlayer);libvlc_time_t totalLenSec totalLen / 1000;int thh, tmm, tss;thh lenSec / 3600;tmm (lenSec % 3600) / 60;tss (lenSec % 60);QTime time(thh, tmm, tss);w-ui.lbCurTime-setText(time.toString(hh:mm:ss));thh totalLenSec / 3600;tmm (totalLenSec % 3600) / 60;tss (totalLenSec % 60);QTime TotalTime(thh, tmm, tss);w-ui.lbTotalTime-setText(TotalTime.toString(hh:mm:ss));double pos (double)lenSec / totalLenSec * 100;w-ui.horizontalSlider-setValue(pos);}break;case libvlc_MediaPlayerEndReached:qDebug() VLC播放完毕.;break;case libvlc_MediaPlayerStopped:qDebug() VLC停止播放;break;case libvlc_MediaPlayerPlaying:qDebug() VLC开始播放;break;case libvlc_MediaPlayerPaused:qDebug() VLC暂停播放;break;} } 更多参考 libVLC 事件机制-CSDN博客 libVLC windows开发环境搭建-CSDN博客 libVLC 元数据-CSDN博客 libVLC 添加图片和文本水印-CSDN博客 libVLC 音频输出设备切换-CSDN博客 libVLC 音频立体声模式切换-CSDN博客
http://www.zqtcl.cn/news/199083/

相关文章:

  • 苏州网站建设功能大宗交易平台软件
  • 无域名网站 能否被百度品牌营销优化
  • 做爰全过程免费的网站视频做网站视频背景
  • 网站布局设计分析特点手机网站设计欣赏网站
  • 建设网站对服务器有什么要求灌南县规划局网站一品嘉苑规划建设
  • 常平镇仿做网站wordpress教程 菜单
  • 大气的企业网站做网站服务怎么赚钱
  • 如何用网站做淘宝客网易企业邮箱怎么修改密码
  • 白酒网站设计wordpress增加网址大全
  • 网站上图片可以做商业作品吗成都十大景观设计公司
  • 自助建站网站哪个好2017织梦网站怎么做seo
  • 佛山新网站建设咨询做业精灵官方网站
  • 大庆网站设计费用asp网站仿制
  • 革吉网站建设网页游戏中心大全
  • 好的网站特点京东物流网站建设特点
  • 昆明企业自助建站系统网站建设技术交流
  • 卖网站模板网站哪家做的比较好
  • 舟山网站网站建设视频网站建设应该注意什么
  • 网站建设 思维导图免费flash网站源码
  • 提供零基础网站建设教学公司wordpress悬浮下拉
  • 做网站代码难么南京市建设监理协会网站
  • 网站维护 静态页面正规企业展厅设计公司
  • 网站分享图片怎么做东莞网站优化关键词费用
  • 做摄影网站的目的域名注册和网站设计服务
  • 手表网站设计免费常州百度推广优化
  • 网站开发找聚脑网视频直播源码
  • 提供免费服务器的网站南沙电子商务网站建设
  • 厦门网站建设开发公司企业网站设计源代码
  • 微网站服务器酒店手机网站首页设计
  • 网站交互做的比较好的怎样营销网站建设