请问大家一个关于Node-webkit的Nodejs问题

请问大家一个关于Node-webkit的Nodejs问题

    我刚刚接触Node-webkit,觉得有点意思,但是遇到一些莫名奇妙的问题,分享给大家,并问一些问题

首先是出现package.json找不到的情况,这种情况的解决方式是选择所有要打包的文件,然后打成ZIP包再修改名字即可, 否则可能出现目录嵌套就找不到package.json的路径了. 另外遇到的一个问题:想利用node-webkit开发一个桌面的音乐类应用,但是发现MP3无法支持,与是按照作者的方式 在google/chrome的目录中找到libffmpegsumo.so文件,然后放在node-webkit的编译路径之下,的确效果变换了,以前的时候 无论如何都无法出现播放器缓冲,现在可以出现播放器缓冲了,但是无法播放歌曲,请问大家问题出在什么地方,代码如下: ** ######<!doctype html> ######<html lang=“en”> ######<head>

<meta charset=“UTF-8”>

###### <title>Document</title> ###### <script src=“jquery.js”></script> ######</head> ######<body> <audio id="audio-player" src="http://mr4.douban.com/201306141518/3db1512020d7f293dd33ed05a7b88638/view/song/small/p1381352.mp3" controls autoplay></audio> <div id="content"> <ul id="song-list"></ul> </div>

  <script>
		$(document).ready(function(){
			var fs = require("fs");
			fs.readdir("/home/wwwroot/Music",function(err,files){
				for(var i in files){
					$("<li></li>").appendTo($('#song-list')).html(files[i]);
					next();
				}
			});
		function next(){
			$('li').click(function(){
			var audio_player = document.getElementById("audio-player");
			var index = $('li').index(this);
			audio_player.src="http://192.168.54.78/Music/"+$('li').eq(index).html();
		})
		}
	})
&lt;/script&gt;

######</body> ######</html> **


10 回复

针对你提到的问题,涉及到了Node-Webkit(现称为NW.js)的使用,以及如何在应用中实现音频播放。根据你的描述,虽然你已经解决了libffmpegsumo.so文件的缺失问题,使得播放器能够显示缓冲进度,但仍然无法播放MP3文件。这可能是由于权限问题或路径错误导致的。

解决方案

首先,确保你有正确的文件路径和权限来访问音频文件。在你的代码中,你需要确保fs.readdir读取到的文件路径正确,并且这些文件可以通过Node.js的fs模块访问。

其次,考虑到网络上的资源可能更容易被浏览器识别为可播放的媒体,尝试直接从网络加载音频文件。如果本地文件无法播放,可能是因为Node.js环境下的某些限制或配置问题。

示例代码调整

以下是一个简化版的示例代码,旨在解决你提到的问题:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Music Player</title>
    <script src="jquery.js"></script>
</head>
<body>
<audio id="audio-player" controls autoplay></audio>
<div id="content">
    <ul id="song-list"></ul>
</div>

<script>
    $(document).ready(function() {
        // 假设你的音乐文件存储在网络服务器上,这里直接通过URL获取
        const songListUrl = "http://192.168.54.78/Music/songs.json";
        
        $.getJSON(songListUrl, function(data) {
            data.forEach(function(song) {
                $("#song-list").append($("<li>").text(song));
            });
            
            // 绑定点击事件
            $("#song-list li").click(function() {
                var audioPlayer = document.getElementById("audio-player");
                var songName = $(this).text();
                audioPlayer.src = `http://192.168.54.78/Music/${songName}`;
                audioPlayer.play();
            });
        });
    });
</script>
</body>
</html>

在这个示例中,我假设你有一个包含歌曲名称的JSON文件(例如songs.json),它列出了所有可用的歌曲名。这样可以避免直接读取本地文件系统,从而减少权限问题。

确保你的服务器能够正确地提供这些音频文件,并且libffmpegsumo.so文件已正确放置。此外,检查浏览器的控制台是否有任何错误信息,这可以帮助进一步诊断问题。


ERROR:audio_output_device.cc(186)] Not implemented reached in virtual void media::AudioOutputDevice::OnStateChanged(media::AudioOutputIPCDelegate::State) 结束的时候错误是这样的…

多谢,我刚开始还纳闷这个怎么搞呢,原来是有语法的,收藏啦,谢谢!

Hey,Ringtail你好,刚刚在你的主页上没有看到联系方式,就只好在这里回信了^_^

我和一个mm coder在找对node和angular感兴趣的同学一起做项目,能微信联系一下吗?

我的微信是949101567

谢谢啦!

mp3?? 播放器 我推荐给项目给你参考吧…本人正在使用中…

https://github.com/cyrilis/Douban-FM-Express

作者博客: http://cyrilis.com/20130625.html

多谢,我自己搞过电台,想移植到node-webkit正好缺一个项目指导,谢谢

你可以把你的项目分享给我一份吗?学习者

后续就没有搞过了,node-webkit不支持mp3编码,所以移植的操作我放弃了。

根据你的描述,你在使用 Node-WebKit(NW.js) 开发一个音乐播放器时遇到了一些问题。具体来说,虽然 MP3 文件已经可以显示播放器缓冲,但仍然无法正常播放。这可能是由于编译路径和文件路径不匹配或者文件读取权限问题导致的。

解决方案

  1. 确保 libffmpegsumo.so 放在正确的位置:你需要确保 libffmpegsumo.so 文件放置在 Node-WebKit 的运行目录下,并且文件名和位置正确。

  2. 检查文件路径和权限:确保 Node.js 能够访问到你指定的音乐文件路径。同时,文件路径需要与 HTML 中引用的路径一致。

  3. 改进代码逻辑:为了更好地处理音乐文件列表的生成和点击事件,我们可以改进代码逻辑,使其更加清晰和健壮。

示例代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Music Player</title>
<script src="jquery.js"></script>
</head>
<body>
<audio id="audio-player" controls autoplay></audio>
<div id="content">
  <ul id="song-list"></ul>
</div>

<script>
  $(document).ready(function() {
    var fs = require('fs');
    var path = require('path');

    // 读取指定目录下的所有音乐文件
    fs.readdir(path.join(__dirname, 'Music'), function(err, files) {
      if (err) throw err;

      // 生成音乐文件列表
      files.forEach(function(file) {
        if (file.endsWith('.mp3')) {
          $('<li></li>').text(file).appendTo('#song-list');
        }
      });

      // 处理点击事件
      $('#song-list li').click(function() {
        var audioPlayer = document.getElementById('audio-player');
        var fileName = $(this).text();
        audioPlayer.src = path.join(__dirname, 'Music', fileName);
        audioPlayer.play();
      });
    });
  });
</script>
</body>
</html>

关键点解释

  1. 引入 path 模块:使用 path 模块来处理路径相关的操作,确保路径拼接正确。
  2. 检查文件类型:只处理 .mp3 文件,避免不必要的文件。
  3. 简化代码逻辑:通过 forEach 方法遍历文件列表,并直接处理点击事件,使代码更简洁。

希望这些调整能帮助你解决问题!如果还有其他疑问,请随时提问。

回到顶部