怎么暫停(怎么暫停城鄉居民醫保)
1342
2025-03-31
一、功能介紹
libvlc播發器引擎除了能播放本地視頻外,也支持播放各種協議的流媒體視頻,比如常見的RTMP、RTSP格式視頻。
在前面幾篇文章里陸陸續續介紹了libvlc的常用的使用方法,這篇文章繼續介紹libvlc的知識點: 播放指定協議的視頻。
libvlc提供了兩種直接打開視頻的方法:
/** * Create a media with a certain given media resource location, * for instance a valid URL. * * \note To refer to a local file with this function, * the file://... URI syntax must be used (see IETF RFC3986). * We recommend using libvlc_media_new_path() instead when dealing with * local files. * * \see libvlc_media_release * * \param p_instance the instance * \param psz_mrl the media location * \return the newly created media or NULL on error */ LIBVLC_API libvlc_media_t *libvlc_media_new_location( libvlc_instance_t *p_instance, const char * psz_mrl ); /** * Create a media for a certain file path. * * \see libvlc_media_release * * \param p_instance the instance * \param path local filesystem path * \return the newly created media or NULL on error */ LIBVLC_API libvlc_media_t *libvlc_media_new_path( libvlc_instance_t *p_instance, const char *path );
其中 libvlc_media_new_path 用于打開本地視頻文件,可以直接傳入本地磁盤路徑。
例如:
libvlc_media_new_path(vlc_base,"D:\\work\\test.mp4");
注意: windows下使用libvlc_media_new_path 函數傳入的路徑要注意斜杠問題,必須保證傳入的是雙右斜杠,如果默認選擇的路徑是左斜杠,可以使用std::replace函數轉換一下。
filename="D:/work/test.mp4"; std::replace(filename.begin(), filename.end(), QChar('/'), QChar('\\'));
另一個libvlc_media_new_location 函數用于打開協議,這個函數更加強大,可以支持很多協議,本地視頻也可以使用該函數打開,更加通用一點,而且使用該函數時,路徑斜杠使用常規左斜杠就行(linux風格),不需要進行轉換。
下面介紹幾個常用的使用示例:
打開本地文件: libvlc_media_new_location (inst, "file:///D:/work/test.mp4"); 打開RTSP流媒體:libvlc_media_new_location (inst, "rtsp://10.0.0.4:554/cam"); 打開RTMP流媒體:libvlc_media_new_location (inst, "rtmp://10.0.0.4:554/cam"); 播放當前桌面屏幕: libvlc_media_new_location (inst, "screen://");
注意: 使用 libvlc_media_new_location 函數打開路徑之后不要使用std::replace轉換路徑。
播放桌面屏幕的效果:
libvlc_media_new_location (inst, "screen://")
播放rtmp流效果
libvlc_media_new_location (inst, "rtmp://media3.scctv.net/live/scctv_800")
二、完整代碼示例
#include "widget.h" #include "ui_widget.h" Widget* Widget::pThis = nullptr; Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { pThis=this; ui->setupUi(this); //創建并初始化libvlc實例 vlc_base=libvlc_new(0,nullptr); this->setWindowTitle("libvlc設計的視頻播放器"); } Widget::~Widget() { delete ui; } //選擇視頻 void Widget::on_pushButton_open_clicked() { /*選擇文件*/ filename=QFileDialog::getOpenFileName(this,"選擇打開的文件","D:/",tr("*.*")); filename="file:///"+filename; /*停止媒體文件*/ if(vlc_mediaPlayer)libvlc_media_player_stop(vlc_mediaPlayer); //QThread::msleep(5000); /*為特定文件路徑創建媒體*/ if(vlc_media)libvlc_media_release(vlc_media); // vlc_media=libvlc_media_new_path(vlc_base,filename.toUtf8().data()); vlc_media=libvlc_media_new_location (vlc_base,filename.toUtf8().data()); if(vlc_media==nullptr) { qDebug()<<"libvlc_media_new_path 執行錯誤."; return; } /*根據給定的媒體對象創建一個播放器對象*/ if(vlc_mediaPlayer)libvlc_media_player_release(vlc_mediaPlayer); vlc_mediaPlayer=libvlc_media_player_new_from_media(vlc_media); //忽略事件處理(這樣libvlc就捕獲不到鼠標和鍵盤事件了) if (vlc_mediaPlayer)libvlc_video_set_mouse_input(vlc_mediaPlayer, false); if (vlc_mediaPlayer)libvlc_video_set_key_input(vlc_mediaPlayer, false); //創建事件管理器 eventManager = libvlc_media_player_event_manager(vlc_mediaPlayer); //訂閱事件 attachEvents(eventManager); /*設置給予媒體播放器媒體輸出的win32/win64窗口句柄*/ libvlc_media_player_set_hwnd(vlc_mediaPlayer, (void *)ui->widget->winId()); /*播放媒體文件*/ if(vlc_mediaPlayer)libvlc_media_player_play(vlc_mediaPlayer); //等待VLC解析文件.否則下面的時間獲取不成功 QThread::msleep(500); //獲取媒體文件總長度 ms libvlc_time_t length = libvlc_media_player_get_length(vlc_mediaPlayer); qDebug()<<"媒體文件總長度:"<
5G媒體 視頻
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。