You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用samsung-tv-control包控制三星Tizen电视遇WebSocket错误,无法获取Token与应用信息

解决三星Tizen电视控制的WebSocket错误及应用获取问题

核心问题分析

你遇到的RangeError: Invalid WebSocket frame: invalid status code 1005是因为WebSocket连接未正确建立,大概率是配置错误、电视权限未开启,或者方法调用时机不对导致的。同时token的获取需要完成电视端的授权流程,首次连接时无需手动填写。

必做前置设置(电视端)

  • 开启远程控制(网络):电视设置→通用→外部设备管理器→远程控制→开启网络远程控制
  • 开启开发者模式:电视设置→支持→关于此电视→连续按遥控器的信息键5次,返回设置会出现开发者选项
  • 开发者选项里:允许安装未知来源应用,开启远程调试
  • 确保电视和你的Node.js服务在同一局域网

配置与代码修正

1. 修正config配置项

  • 把port改回默认的8002(Tizen电视的标准控制端口)
  • 移除noServer: true(这个选项用于自定义WebSocket服务器,你不需要)
  • 首次运行时token留空,等授权后填入返回的token

2. 调整代码逻辑(修复方法调用时机)

isAvailable仅检测电视是否在线,不代表WebSocket连接已建立。需要等待包的connect事件触发后,再调用getToken、getAppsFromTV这类需要连接的方法。

修正后的代码:

const express = require("express");
const { Samsung } = require("samsung-tv-control");
const app = express();

const config = {
  debug: true,
  ip: "xxx.xx.xxx.xxx", // 替换成你的电视IP
  mac: "xx:xx:xx:xx:xx:xx", // 替换成你的电视MAC
  nameApp: "NodeJS",
  port: 8002, // 改回默认端口
  token: "", // 首次留空,授权后填入
};

const control = new Samsung(config);
let isConnected = false;

// 监听连接成功事件
control.on("connect", () => {
  isConnected = true;
  console.log("已连接到电视");
  
  // 获取token(首次运行时电视会弹出授权框)
  control.getToken((token) => {
    console.info("获取到Token:", token);
    // 把这个token保存到config里,下次启动就不用再授权了
  });

  // 获取已安装应用
  control.getAppsFromTV((err, apps) => {
    if (!err) {
      console.log("已安装应用列表:", apps);
    } else {
      console.error("获取应用失败:", err);
    }
  });
});

// 监听连接错误事件
control.on("error", (err) => {
  console.error("连接错误:", err);
});

app.get("/", async (req, res) => {
  res.send("TV 控制服务运行中");
  
  if (!isConnected) {
    // 尝试连接电视
    control.connect();
  } else {
    // 示例:启动指定应用(需要从getAppsFromTV的返回中获取appId)
    // control.launchApp("com.samsung.tv.hbo");
  }
});

app.listen(3000, () => {
  console.log("服务运行在 http://localhost:3000");
});

Token说明

  • 首次运行代码时,电视屏幕会弹出授权提示框,选择允许后,控制台会输出token字符串
  • 把这个token复制到config的token字段中,下次启动服务时无需再授权,直接建立连接

启动应用的方法

从getAppsFromTV返回的应用列表中找到目标应用的appId,调用control.launchApp(appId)即可启动,比如:

// 启动Netflix
control.launchApp("com.netflix.ninja");

内容的提问来源于stack exchange,提问作者user21744620

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:47:46