<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          libVLC 媒體信息(元數(shù)據(jù))

          共 2333字,需瀏覽 5分鐘

           ·

          2020-08-23 14:03

          1

          什么是元數(shù)據(jù)


          元數(shù)據(jù)可看作是物體內(nèi)部信息的高級摘要。對于一本書而言,這些數(shù)據(jù)由作者、標題、發(fā)布日期等組成。而對于多媒體,元數(shù)據(jù)是指標題、專輯、藝術家、年代等信息。同樣地,元數(shù)據(jù)也可用于描述其它類型的內(nèi)容,如文檔、圖像、網(wǎng)頁等等。


          之所以需要元數(shù)據(jù),是因為這能夠讓物體更容易地被識別、查找、管理和發(fā)現(xiàn)。假如你正在搜索特定類型的曲目,使用元數(shù)據(jù)過濾會十分方便,將藝術家設置為“周杰倫”或者將流派設置為“搖滾”,這時歌曲列表中只會顯示周杰倫的曲目或者搖滾類型的曲目。


          所以說,要實現(xiàn)一個多媒體播放器,這些信息是必不可少的。那么,libVLC 究竟如何獲取這些元數(shù)據(jù)呢?并且是否能對這些信息進行更改呢?



          2

          元數(shù)據(jù)類型


          在 libVLC 中,元數(shù)據(jù)類型由枚舉類型 libvlc_meta_t 表示,它的各個值和含義如下:


          枚舉含義
          libvlc_meta_Title標題
          libvlc_meta_Artist藝術家
          libvlc_meta_Genre流派
          libvlc_meta_Copyright版權(quán)
          libvlc_meta_Album專輯
          libvlc_meta_TrackNumber軌道編號
          libvlc_meta_Description描述
          libvlc_meta_Rating評分
          libvlc_meta_Date日期
          libvlc_meta_Setting設置
          libvlc_meta_URL地址
          libvlc_meta_Language語言
          libvlc_meta_NowPlaying正在播放
          libvlc_meta_Publisher發(fā)行商
          libvlc_meta_EncodedBy編碼者
          libvlc_meta_ArtworkURL專輯圖片地址
          libvlc_meta_TrackID軌道 ID
          libvlc_meta_TrackTotal軌道總數(shù)
          libvlc_meta_Director導演
          libvlc_meta_Season第幾季
          libvlc_meta_Episode插曲
          libvlc_meta_ShowName顯示名
          libvlc_meta_Actors表演者
          libvlc_meta_AlbumArtist專輯藝術家
          libvlc_meta_DiscNumber碟號
          libvlc_meta_DiscTotal總碟數(shù)


          隨著 libVLC 的版本更新,這個列表將來有可能會更改。



          3

          讀取媒體信息


          要獲取媒體信息,我們需要監(jiān)聽 libvlc_MediaParsedChanged 事件(可參考《libVLC 事件機制》),并通過 libvlc_media_parse_with_options() 解析媒體。


          由于測試的?本地媒體,所以第二個參數(shù)使用 libvlc_media_parse_local;倘若是網(wǎng)絡資源,替換為 libvlc_media_parse_network


          //?創(chuàng)建事件管理器
          eventManager?=?libvlc_media_event_manager(media);
          //?訂閱事件
          libvlc_event_attach(eventManager,?libvlc_MediaParsedChanged,?handleEvents,?nullptr);
          //?解析媒體(用于獲取媒體信息,比如:藝術家、專輯等)
          libvlc_media_parse_with_options(media,?libvlc_media_parse_local,?1000);


          注意:在解析媒體信息時,不建議使用 libvlc_media_parse() 或者 libvlc_media_parse_async(),這兩個接口已經(jīng)被遺棄了,取而代之的是 libvlc_media_parse_with_options()。


          然后,就可以在事件處理程序中讀取媒體信息了:


          static?void?handleEvents(const?libvlc_event_t?*event,?void?*userData)
          {
          ????switch?(event->type)?{
          ????case?libvlc_MediaParsedChanged:?{
          ????????int?state?=?event->u.media_parsed_changed.new_status;
          ????????if?(libvlc_media_parsed_status_done?==?state)
          ????????????getMeta(media);
          ????????break;
          ????}
          ????default:
          ????????break;
          ????}
          }


          具體的讀取由 libvlc_media_get_meta() 完成,以標題、藝術家、專輯為例:


          void?getMeta(libvlc_media_t?*media)
          {
          ????//?讀取標題、藝術家、專輯
          ????char?*title?=?libvlc_media_get_meta(media,?libvlc_meta_Title);
          ????char?*artist?=?libvlc_media_get_meta(media,?libvlc_meta_Artist);
          ????char?*album?=?libvlc_media_get_meta(media,?libvlc_meta_Album);

          ????if?(nullptr?!=?title)
          ????????cout?<"title:?"?<endl;

          ????if?(nullptr?!=?artist)
          ????????cout?<"artist:?"?<endl;

          ????if?(nullptr?!=?album)
          ????????cout?<"album:?"?<endl;
          }


          如果想獲取其他媒體信息,方法類似!



          4

          更改媒體信息


          可以通過 libvlc_media_set_meta() 來設置媒體信息,但該方法并不會保存數(shù)據(jù),還需要調(diào)用 libvlc_media_save_meta() 才行:


          //?設置媒體信息
          libvlc_media_set_meta(media,?libvlc_meta_Title,?"Title");
          libvlc_media_set_meta(media,?libvlc_meta_Artist,?"Artist");
          libvlc_media_set_meta(media,?libvlc_meta_Album,?"Album");

          //?進行保存
          libvlc_media_save_meta(media);



          5

          測試程序


          運行程序,可以看到輸出的媒體信息,如下所示:



          ·END·
          ?

          作者:一去、二三里
          愛學習,愛編程,愛生活。
          歡迎來撩,一起暢談程序人生!

          點個在看,么么噠!

          瀏覽 112
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  四季AV一区二区凹凸懂色 | 男人爱天堂资源网 | 热久色| 天干天干天夜夜爽 | www.一级片 |