2017-04-05 221 views
0

首先尝试这样做:我通过在项目中添加WMPLib作为参考,以编程方式创建了Windows Media Player。我试图在ASP.Net网页(Visual Studio 2015)中使用Windows Media Player播放播放列表。我无法使用HTML 5示例中使用的视频标签,因为我需要在控件中显示.wmv,.mp4,.jpg格式。当我运行代码时,没有显示错误,我看到一个空的浏览器,我错过了什么? 这里是我的示例代码:ASP.NET C中的Windows Media Player#

WMPLib.WindowsMediaPlayer Player; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     FileNames();    
    } 

    public void FileNames() 
    { 
     String[] extentions = { "*.wmv", "*.mp4", "*.jpg" }; 
     List<string> files = new List<string>(); 
     foreach (string filter in extentions) 
     { 
      files.AddRange(System.IO.Directory.GetFiles(@"C:\Documents\", filter)); 
     } 

     foreach (string ss in files) 
     { 
      String name = System.IO.Path.GetFileName(ss); 
      Player = new WMPLib.WindowsMediaPlayer(); 

      WMPLib.IWMPPlaylist playList = Player.newPlaylist("myPlayList", ""); 
      playList.appendItem(Player.newMedia(name)); 
      Player.currentPlaylist = playList; 
      Player.controls.play(); 
     } 
    } 

我知道这是不好的做法硬编码的路径,但我只需要得到这个显示我的本地机器上。 谢谢!

+0

当然你的代码会在你的机器上打开一个WMP,但是如何从浏览器访问你的页面呢?你写的代码恰好在服务器端发生。 – Filburt

+0

感谢Fliburt,那么我如何才能使其工作?我在“Page.Controls.Add(Player)”一行中尝试了一些东西,那么这个正确的实现是什么? – BabyDoll

+0

您无法添加Windows控件。请参阅[如何在HTML播放器中播放wmv视频?](http://stackoverflow.com/q/23260092/205233),了解如何使其发挥作用。 – Filburt

回答

0

经过两周的研究,我们设法根据需要显示的内容在不同类型的控件之间进行切换。要显示PowerPoint幻灯片,我们将所有幻灯片转换为图像,然后循环播放该集合。这里是万一别人的代码片段需要一些指导,以一个类似的问题:背后

<body> 
<form id="form1" runat="server"> 

    <%-- Video DIV --%> 
    <div runat="server" id="VidDiv" class="fullscreen-bg"> 
    </div> 
    <%-- IMAGE DIV --%> 
    <div runat="server" id="container"> 
     <div runat="server" id="containers"> 
     </div> 
     <%-- this is where the code gets dynamically created --%> 
    </div> 
</form> 
</body> 
    <script src="Scripts/jquery-3.1.1.js"></script> 
    <script id="CallMyFunction" type="text/javascript"> 
      var index = 1; 
    document.getElementById("VidDiv").style.display = "none"; 

var ImageCount = 1; 
autoSlide(); 

function autoSlide() { 

    var x = document.getElementsByClassName("Images"); 
    var video_player = document.getElementsByClassName("fullscreen-bd__video"); 
    var count; 
    var video; 
    var videoSource = new Array(), vids, i; 

    for (i = 0; i < x.length; i++) { 
     x[i].style.display = "none"; 
    } 
    if (index > x.length) { 
     index = 1 
    } 

    x[index - 1].style.display = "block"; 

    count = x.length; 

    if (ImageCount <= count) { 
     index++; 
     ImageCount = 1 + ImageCount; 
     setTimeout(autoSlide, 8000); 
    } 
    else { 
     //this is where we should switch from image div to video div 
     document.getElementById("container").style.display = "none"; 
     document.getElementById("VidDiv").style.display = "block"; 

     //create a counter to check the number of video tags 
     video = document.getElementsByTagName('video'), numVideos = video.length; 

     for (i = 0; i < numVideos; i++) { 

      videoSource[i] = video.item(i).src; 
      document.getElementById("myVideo" + i).style.display = "none"; 
     } 

     var videoCount = 0; 
     if (videoCount <= numVideos -1) { 

      function videoPlay(videoNum) { 
       if (videoCount > 0) 
       { 
        document.getElementById("myVideo" + (videoCount - 1)).style.display = "none"; 
       } 
       document.getElementById("myVideo" + videoCount).style.display = "block"; 

       document.getElementById("myVideo" + videoCount).setAttribute("src", "" + videoSource[videoCount] + ""); 
       document.getElementById("myVideo" + videoCount).load(); 
       document.getElementById("myVideo" + videoCount).play(); 
       onEndedVid = document.getElementById("myVideo" + videoCount); 

       var onEndedVid; 
       onEndedVid.onended = function() { 
        //at the end of the video, close full screen 
        myHandler(); 
       }; 

       videoCount = videoCount + 1; 

      } 

      function myHandler() { 

       if (videoCount == numVideos) { 
        //this is where we should switch from image div to video div 
        document.getElementById("container").style.display = "none"; 
        document.getElementById("VidDiv").style.display = "none"; 

        location.reload(); 
       } 
       else { 
        videoPlay(videoCount); 
       } 
      } 
      myHandler(); 

     } 
     else 
     { 
      ///back to images 
      //refresh the page 
      location.reload(); 
     }   
    } 
} 

代码:

// this will be a watcher that checks if is new content... if there is, delete the existing .wpl file and recreate the .wpl with new content links included   
    private void CreateNewPlayList(string folder) 
    { 
     try 
     { 
      System.Threading.Thread.Sleep(5000); 
      fileName = getDrive(folder) + @"\" + folder + "Playlist.wpl"; 
      FileInfo fileInfo = new FileInfo(fileName); 

      String f = @"<?wpl version=""1.0""?> 
      <smil> 
      <head><meta name=""Generator"" content=""Microsoft Windows Media 
     Player -- 10.0.0.3646""/> 
      <author/> 
      <title> a title goes here </title> 
      </head> 
      <body> 
      <seq> "; 
       String ff = @" 
     </seq> 
     </body> 
     </smil>"; 
       using (FileStream fs = fileInfo.Create()) 
      { 
       Byte[] txt = new UTF8Encoding(true).GetBytes(f); 
       fs.Write(txt, 0, txt.Length); 

       ////write paths and load only certain file types according to requirements into array 
       String[] extentions = { "*.mp4", "*.wmv", "*.JPG".ToLower(), "*.ppt", "*.png" }; 

       List<string> files = new List<string>(); 

       foreach (string filter in extentions) 
       { 
        files.AddRange(System.IO.Directory.GetFiles(getDrive(folder) + @"\", filter)); 
       } 

       int filecount = files.Count; 
       string[] video_lists = new string[files.Count]; 

       int counts = 0; 
       foreach (string file in files) 
       { 
        video_lists[counts] = file.ToString(); 
        string PathfileName = Path.GetFileName(file); 
        Byte[] author; 
        //use the ppt to be able to go into the folder and add each slide as part of the playlist 
        if (Path.GetExtension(PathfileName) == ".ppt" || Path.GetExtension(PathfileName) == ".pptx") 
        { 
         //create a loop to loop through the folder that has the same name as ppt/pptx(PathFileName) 
         string pptDrive = getDrive(folder) + @"\" + Path.GetFileNameWithoutExtension(PathfileName) + @"\"; 
         if (Directory.Exists(pptDrive)) 
         { 
          string[] pptFilesFolder = Directory.GetFiles(pptDrive); 
          int counter = 1; 
          while (counter <= pptFilesFolder.Length) 
          { 
           foreach (string pptFile in pptFilesFolder) 
           { 
            string pptFileName = Path.GetFileName(pptFile); 
            string pptFileNameNoExt = Path.GetFileNameWithoutExtension(pptFile);                   

            int i = pptFilesFolder.Length; 
            int ss = Convert.ToInt16(new String(pptFileNameNoExt.Where(Char.IsDigit).ToArray())); 
            if (ss <= i && ss == counter) 
            { 
             author = new UTF8Encoding(true).GetBytes(@"<media src=""" + pptDrive + @"\" + pptFileName + "\"/>"); 
             fs.Write(author, 0, author.Length); 
             counter++; 
            } 
           } 
          } 
         } 
         else 
         { 
          //do something... 
         } 

        } 
        else 
        { 
         author = new UTF8Encoding(true).GetBytes(@"<media src=""" + getDrive(folder) + @"\" + PathfileName + "\"/>"); 
         fs.Write(author, 0, author.Length); 
        } 
        counts = counts + 1; 
       } 

       Byte[] toptxt = new UTF8Encoding(true).GetBytes(ff); 
       fs.Write(toptxt, 0, toptxt.Length); 

      } 

     } 
     catch (IOException io) 
     { 
      //error handling.... 

      return; 
     } 
     catch (Exception ex) 
     { 
      //error handling... 
      return; 
     } 
    } 

的代码可以明显地改善和优化,但这是我们用来让我们的应用程序工作的基础。感谢所有的建议和意见!