标签: windows-media-player

WMPLib:player.mediaCollection.getAll().count始终为0

我正在尝试编写从用户的Windows Media Player库中读取每个项目的代码.此代码适用于大多数用户,但对于某些用户,getAll()当他们的Windows Media Player库中明显包含数百或数千个项目时,将返回空列表.

var player = new WindowsMediaPlayer();
var collection = player.mediaCollection;
var list = collection.getAll();
int total = list.count;
Run Code Online (Sandbox Code Playgroud)

WMPLib通过添加对wmp.dll的COM引用来引用命名空间.我的应用程序随附Interop.WMPLib.dll.如何配置某些用户的计算机,使其在其库中运行带有许多歌曲的Windows Media Player,但WMPLib无法正常运行?此外,在所有情况下可靠地读取用户的Windows Media Player库有哪些变通方法?

.net c# com wmp windows-media-player

16
推荐指数
1
解决办法
2623
查看次数

如果以编程方式创建控件,则Windows Media Player视频为黑色

我正在尝试以编程方式创建Windows Media Player控件,以便我可以捕获任何初始化错误.在我简单地将控件放在表单上之前,一切都很好.但是现在我正在尝试以编程方式播放视频,视频没有出现在控件中.我只看到黑色视频,但我听到了音频.

有任何想法吗?

    public TrimVideoControl()
    {
        InitializeComponent();

        // Try creating WMP control
        // We do this here so we can gracefully catch errors if the control doesn't load
        try
        {

            wmPlayer = new AxWMPLib.AxWindowsMediaPlayer();
            ((System.ComponentModel.ISupportInitialize)(wmPlayer)).BeginInit();
            //SuspendLayout();
            wmPlayer.CreateControl();
            wmPlayer.Name = "wmPlayer";
            wmPlayer.Ctlenabled = true;
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TrimVideoControl));
            wmPlayer.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("wmPlayer.OcxState")));
            wmPlayer.Location = new Point(12, 13);
            wmPlayer.Size = new Size(636, 358);
            wmPlayer.enableContextMenu = true;
            wmPlayer.stretchToFit = true;
            wmPlayer.uiMode = "none";
            wmPlayer.settings.autoStart = false;
            wmPlayer.ErrorEvent += wmPlayer_ErrorEvent;
            wmPlayer.MediaChange += wmPlayer_MediaChange; …
Run Code Online (Sandbox Code Playgroud)

c# windows-media-player axwindowsmediaplayer

9
推荐指数
1
解决办法
4735
查看次数

是否有针对Windows Media Player的文档化JavaScript API?

我想使用JavaScript来控制嵌入式Windows Media Player,以及访问播放器公开的任何属性.我在网上找到了一些hacky示例,但没有具体的内容.

我真的需要访问播放,暂停,停止,搜索,全屏等.我还希望能够访问播放器正在播放的任何事件.

帮助会很精彩(我已经有了一个Flash等效,只是你知道),谢谢!

javascript windows-media-player

7
推荐指数
2
解决办法
2万
查看次数

Windows Media Player忽略我

我曾经在这里问过有关通过Java控制Windows Media Player的问题. 我已经取得了进步,但我遇到了一个棘手的问题,所以我回来寻求帮助.

我按照上次给出的建议,安装雅各布.我从测试脚本中执行这些行:

ActiveXComponent wmp = new ActiveXComponent("WMPlayer.OCX");
wmp.invoke("openPlayer", "http://somafm.com/wma128/groovesalad.asx");
Run Code Online (Sandbox Code Playgroud)

...和WMP弹出,玩SomaFM."W00t!" 我认为."我已经解决了这个问题!"

除了当我在创建它之后与该对象交互时,它似乎与WMP实例播放没有任何关系.当我执行此代码时:

ActiveXComponent wmpSettings = new
ActiveXComponent(wmp.getProperty("settings").toDispatch());
System.out.println("VOLUME: " + wmpSettings.getProperty("volume"));
wmpSettings.setProperty("volume", 0);
System.out.println("VOLUME: " + wmpSettings.getProperty("volume"));
Run Code Online (Sandbox Code Playgroud)

...我得到的输出:

VOLUME: 50
VOLUME: 0

这似乎无害,除此之外

  1. "50"的音量与实际设定的播放器音量无关
  2. setProperty调用后,播放器的音量实际上没有变化.

我也尝试了其他属性,但它是一样的:属性的值似乎与玩家实际做的事情没有关系,而改变它们似乎改变了被操纵对象的状态,它对实际玩家没有影响. (每次运行脚本时,我都得到完全相同的输出,所以无论是什么,当我转动"音量"时我都会改变它,它在代码之外没有任何持久性.)

显然我做错了什么,但我一直摸索着试图找出什么.任何人都可以向我提供任何有关出错的信息,或者我接下来应该尝试的内容吗?

(注意:我甚至不确定"WMPlayer.OCX"是正确的输入参数.我在注册表中的HKEY_CLASSES_ROOT中试验了看起来很可能的条目,直到找到这个.)

我提前感谢任何人提供的任何帮助.


编辑,4/15/2009: 我在一家名为EZ JCom的公司的产品中找到了一个特定于WMP的软件包.它失败的方式与我之前看到的完全相同,要么它只是Jacob的包装器,要么是WMP ActiveX/COM接口完全坏了.(等等,为什么我说"要么"?)

我与客户服务人员聊天,他们最终展示了如何在没有实际用处的情况下提供帮助.他们帮助我纠正了他们提供的非编译示例代码作为他们的WMP代码的实例,但是当我纠缠他们以了解get/set卷方法应该如何工作时,我得到了这个:

"对不起,但这里没有WMP深度专业知识--EZ JCom只是Java与WMP等其他程序之间的桥梁建设者."

请记住,我评估的他们的包实际上被称为"wmp.WindowsMediaPlayer".如果我得到它的工作,我将不得不与我的老板谈论花费600美元的许可证.人们想知道如果他们真正拥有自己产品的专业知识,他们会收取什么费用.

所以,没有真正的进步.只是想我会分享.


编辑,2009年4月20日: 是的,我仍然在嘲笑这个.我目前的操作理论是,为了获得音量设置,我需要远程访问WMP.我已经看到了IWMPRemoteMediaServices和IServiceProvider接口的提及,后者的QueryService方法提供了指向前者的指针.不幸的是,我没有任何关于如何获得IServiceProvider的运气.我已经看到提到它可以从Windows"系统"对象访问,但我无法弄清楚如何获取该对象.(而且由于"系统"这个词在Java中非常重要,谷歌给了我一个喧闹的声音:信号比率.)如果有人对如何把手放在代表System.dll的COM对象上有任何建议,我很乐意听到.


编辑,4/21/2009: 澄清:这是在XP系统上.

另外:我的研究表明仅仅谈论WMP对象是不够的; 你需要把它包裹得更紧,所以它可以回复.有一个包含大量C++内容的WMP SDK,但它似乎依赖于Microsoft Visual C++对我没有的代码的扩展,并且它们不是免费赠送的.(此外,我在12年内没有完成C++.)我知道C#可以实现,但如果我不在Java之外,我需要将解决方案作为独立的可执行文件并且不安装.NET相关的机器.


编辑,2009年4月22日: 根据Mark的答案,我从WinUser.h中挖出了APPCOMMAND_MEDIA_*常量并尝试了以下代码,它使用了NativeCall api:

final int APPCOMMAND_MEDIA_PLAY = 46;
final int APPCOMMAND_MEDIA_PAUSE = …
Run Code Online (Sandbox Code Playgroud)

activex windows-media-player

7
推荐指数
1
解决办法
2392
查看次数

Delphi:启动 MCI 时出现 EMCIDeviceError

我使用 TMediaPlayer 组件来播放音乐。

它适用于我的大部分曲目。但它不适用于某些曲目。当我想播放它们时,会显示以下错误消息:

替代文字

这是德语,但大致意思是:

在项目 pMusicPlayer.exe 中,发生了类 EMCIDeviceError 的异常。消息:“启动 MCI 时出错。”。进程已停止。继续“单个命令/语句”或“开始”。

程序调用TMediaPlayer的“Play”程序后直接退出。

例如,以下文件发生此错误:

  • 文件大小:7.40 MB
  • 持续时间:4:02 分钟
  • 比特率:256 kBit/s

我用 128 kBit/s 的比特率编码了这个文件,因此文件大小为 3.70 MB:它工作正常!

第一个文件有什么问题?Windows Media Player 或其他程序可以毫无问题地播放它。

Delphi 的 TMediaPlayer 是否可能无法处理大文件(例如 > 5 MB)或具有高比特率(例如 > 128 kBit/s)的文件?

我能做些什么来解决问题?

附加问题: 为什么我不能使用 try/except 来阻止消息窗口?

  try
    Player.Play;
  except
    showmessage('Cannot be played');
  end;
Run Code Online (Sandbox Code Playgroud)

这不起作用。

delphi mp3 windows-media-player audio-player

7
推荐指数
1
解决办法
9403
查看次数

MediaElement可播放哪些类型的视频?

我正在寻找有关什么决定MediaElement可以播放的媒体格式的详细信息,我似乎无法找到任何明确的来源.我读过某个地方,如果它可以在WMP MediaElement中播放,那么可以播放它.这是真的?如果是,那么我的下一个问题是我在哪里可以找到WMP的功能和限制?WPF MediaElement和WMP 之间的联系在哪里?我正在寻找对WPF中这些组件和视频播放的更好理解,并且到目前为止还很难在网上找到任何东西.

.net wpf video mediaelement windows-media-player

6
推荐指数
1
解决办法
2805
查看次数

如何将多个文件添加到播放列表

我有一个OpenFileDialog控件Multiselect = true.现在我想将每个文件添加到Windows媒体播放器播放列表中,但我不知道如何做到这一点,并且在互联网上没有好的例子.

if (ofdSong.ShowDialog() == DialogResult.OK)
{
    foreach (string file in ofdSong.FileNames)
    {
        //Code to add file to the playlist
    }
}
Run Code Online (Sandbox Code Playgroud)

c# windows-media-player playlist axwindowsmediaplayer

6
推荐指数
1
解决办法
2万
查看次数

如何在Video控件上创建透明标签

我在这里几乎没有想法......对于其他一切,将背景颜色设置为Color.Transparent或设置TransparencyKey工作正常...

我有一个mp4视频,我需要将其作为我的表单的"背景".为此,我目前正在使用WMP控件.我的问题:我不能在它上面添加任何控件,因为它们总是呈现背景.哪个看起来像**视频...

有什么建议?

c# vb.net visual-studio-2010 windows-media-player axwindowsmediaplayer

5
推荐指数
2
解决办法
4655
查看次数

窗口媒体播放器c#中的背景颜色

Windows Media Player Control的默认背景颜色为黑色.我们可以改变这种颜色吗?

在msdn网站上发现DisplayBackColor属性可用于Windows CE,但在我的winforms应用程序中不可用.

还有其他改变方法吗?

c# windows-media-player

5
推荐指数
0
解决办法
1260
查看次数

完成旧曲目后,如何让TWindowsMediaPlayer播放新曲目?

我正在使用TWindowsMediaPlayer并遇到问题。当前歌曲完成后,我无法加载新歌曲然后播放。

procedure TMainWinForm.WMPlayer1PlayStateChange(Sender: TObject;
          NewState: Integer);
  begin
    if (NewState = wmppsMediaEnded) then
      begin
        WMPlayer1.URL := FileScanner.SelectSong;
        writeln('Play triggered on ', String(WMPlayer1.URL));
        WMPlayer1.controls.Play;  // DOES NOT PLAY THE SONG!
      end;
  end;
Run Code Online (Sandbox Code Playgroud)

这会加载歌曲,但需要其他用户干预才能实际播放。我要让它继续下去的唯一方法是检查wmppsStopped,但是该事件发生了两次,所以我得到了列表中的所有奇数编号的歌曲。

关于如何使其正确运作的任何想法?

delphi windows-media-player

5
推荐指数
1
解决办法
2051
查看次数