如何在 Rust 中获取当前正在播放的媒体元数据

问题描述 投票:0回答:1

我已经尝试了几个板条箱,但似乎没有得到它。 有关更多信息,我正在尝试在 Tauri 中使用它,我不太擅长 Rust,因为我是 Javascript 开发者

// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
use playerctl::{PlayerCtl, TrackMetadata};
use serde::{Deserialize, Serialize};
use tauri::{AppHandle, Manager};

#[derive(Serialize)]
struct Metadata {
    artist: String,
    title: String,
    album: String,
    // Add other fields as needed
}

#[tauri::command]
 fn get_current_media_metadata(app_handle: AppHandle) -> Result<Metadata, String> {
    let track_metadata = PlayerCtl::metadata();

    let metadata = Metadata {
        artist: track_metadata.artist,
        title: track_metadata.title,
        album: track_metadata.album,
        // Add other fields as needed
    };

    Ok(metadata)
}

fn main() {
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![get_current_media_metadata])
        .run(tauri::generate_context!())
        .expect("failed to run app");
}


我得到的错误是:

thread 'main' panicked at /home/n3rd/.cargo/registry/src/index.crates.io-6f17d22bba15001f/playerctl-0.1.0/src/lib.rs:40:29:
Failed to execute command 'playerctl metadata title'
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
rust audio metadata tauri
1个回答
1
投票

正如 @cafce25 指出的,您需要在目标系统上安装

playerctl

正确的方法是使用 Rust 包装器包装 C/C++ 库代码并在代码中调用它。有人已经做了尝试: playerctl-sys 所以这可能更适合你。它应该为您的平台编译代码,您的用户不需要单独安装它。

查看他们的测试源代码,以更好地了解如何为您的目的获取元数据。

© www.soinside.com 2019 - 2024. All rights reserved.