2024-10-08

#include <windows.h>
#include <flutter/method_channel.h>
#include <flutter/plugin_registrar_windows.h>
#include <flutter/standard_method_codec.h>
#include <wmp.h>

#include <memory>
#include <string>

class VideoWindow {
 public:
  static void RegisterWithRegistrar(flutter::PluginRegistrarWindows *registrar);

 private:
  VideoWindow();
  ~VideoWindow();

  void CreateVideoWindow(const std::string &video_url);

  flutter::PluginRegistrarWindows *registrar_;
  HWND hwnd_;
  CComPtr<IWMPPlayer> player_;
};

void VideoWindow::RegisterWithRegistrar(flutter::PluginRegistrarWindows *registrar) {
  auto channel = std::make_unique<flutter::MethodChannel<flutter::EncodableValue>>(
      registrar->messenger(), "video_window_channel",
      &flutter::StandardMethodCodec::GetInstance());

  auto plugin = std::make_unique<VideoWindow>();

  channel->SetMethodCallHandler(
      [plugin_pointer = plugin.get()](const auto &call, auto result) {
        if (call.method_name().compare("createVideoWindow") == 0) {
          const auto *arguments = std::get_if<flutter::EncodableMap>(call.arguments());
          if (arguments) {
            auto video_url_it = arguments->find(flutter::EncodableValue("videoUrl"));
            if (video_url_it != arguments->end()) {
              std::string video_url = std::get<std::string>(video_url_it->second);
              plugin_pointer->CreateVideoWindow(video_url);
              result->Success();
              return;
            }
          }
          result->Error("Invalid arguments", "Expected videoUrl");
        } else {
          result->NotImplemented();
        }
      });

  registrar->AddPlugin(std::move(plugin));
}

VideoWindow::VideoWindow() : registrar_(nullptr), hwnd_(nullptr) {}

VideoWindow::~VideoWindow() {
  if (player_) {
    player_->close();
  }
}

void VideoWindow::CreateVideoWindow(const std::string &video_url) {
  if (!hwnd_) {
    hwnd_ = CreateWindowEx(0, L"STATIC", L"Video Player", WS_OVERLAPPEDWINDOW,
                           CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, nullptr, nullptr,
                           GetModuleHandle(nullptr), nullptr);
    ShowWindow(hwnd_, SW_SHOW);
  }

  if (!player_) {
    CoInitialize(nullptr);
    player_.CoCreateInstance(CLSID_WindowsMediaPlayer, nullptr, CLSCTX_INPROC_SERVER);
    CComPtr<IWMPPlayer4> player4;
    player_.QueryInterface(&player4);
    player4->put_uiMode(CComBSTR(L"none"));
    player4->put_windowlessVideo(VARIANT_TRUE);
    player4->put_stretchToFit(VARIANT_TRUE);
    player4->put_URL(CComBSTR(video_url.c_str()));
    player4->put_windowlessVideo(VARIANT_TRUE);
    player4->put_stretchToFit(VARIANT_TRUE);
    player4->put_windowlessVideoParent(hwnd_);
  }

  player_->controls->play();
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末偿衰,一起剝皮案震驚了整個濱河市改览,隨后出現(xiàn)的幾起案子缤言,更是在濱河造成了極大的恐慌宝当,老刑警劉巖墨闲,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸳碧,死亡現(xiàn)場離奇詭異盾鳞,居然都是意外死亡瞻离,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門推励,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肉迫,“玉大人,你說我怎么就攤上這事喊衫。” “怎么了壳贪?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵寝杖,是天一觀的道長。 經(jīng)常有香客問我瑟幕,道長,這世上最難降的妖魔是什么只盹? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任鹿霸,我火速辦了婚禮秆乳,結(jié)果婚禮上懦鼠,老公的妹妹穿的比我還像新娘。我一直安慰自己街氢,他們只是感情好睦袖,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著馅笙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烈和。 梳的紋絲不亂的頭發(fā)上皿淋,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音窝趣,去河邊找鬼。 笑死哑舒,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乖阵。 我是一名探鬼主播预麸,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吏祸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蹈矮,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鸣驱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后踊东,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刚操,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡再芋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年济赎,在試婚紗的時候發(fā)現(xiàn)自己被綠了鉴逞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片司训。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖叭喜,靈堂內(nèi)的尸體忽然破棺而出蓖谢,到底是詐尸還是另有隱情捂蕴,我是刑警寧澤闪幽,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站溉知,受9級特大地震影響腕够,放射性物質(zhì)發(fā)生泄漏级乍。R本人自食惡果不足惜帚湘,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捅厂。 院中可真熱鬧资柔,春花似錦焙贷、人聲如沸贿堰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至契吉,卻和暖如春诡渴,著一層夾襖步出監(jiān)牢的瞬間捐晶,已是汗流浹背妄辩。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眼耀,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓哮伟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親池凄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 面對有意為難你的人,不要退縮碎税,要勇敢面對。 一次校會雷蹂,主持人大喊:“下面有請成績最差的學(xué)生家長上臺講話∥樱” 一位男...
    天邊的虹閱讀 97評論 0 5
  • 《企業(yè)文明》 國家級知網(wǎng)月刊 ISSN:1006-5989 CN:50-1014/G2 【收稿方向】企業(yè)管理虐杯、經(jīng)濟...
    歲月靜好925閱讀 78評論 0 0
  • 從今天開始,你將涅槃重生擎椰,逆風(fēng)翻盤,這局是必勝局达舒,你將會有越來越多的錢叹侄,越來越多的財富。你將有無限可能趾代。 從今天開...
    尹小月閱讀 47評論 0 0
  • 國慶節(jié)的夜晚與平時的夜晚并無什么特別的不同丰辣。路燈照射下明亮的街面,來來往往的車輛笙什,行色匆匆的人流……。偶然的念起:...
    74e80bcc1a31閱讀 54評論 0 3
  • 這幾天看《易經(jīng)的奧秘》 曾仕強老師的 744也在看芽隆,他看2,我看1胚吁。 今天起來有氣數(shù)不夠的感覺鸿吆。 少說話囤采,不動氣惩淳。...
    Asherly閱讀 35評論 0 0