首页 > 解决方案 > 改变brightscript的roAssociativeArray中某个字段的值

问题描述

当用户按下视频资产上的观看按钮时,我创建了任务并运行它(以获取视频详细信息)。我能够运行任务并从服务器获取播放详细信息。获得播放详细信息后,我需要每 30 秒运行一次计时器,一旦计时器被触发,我需要运行另一个任务来更新服务器的心跳。收到心跳响应后,我需要将播放详情的一个字段更新为心跳响应的值。即使我使用 addReplace() 更改了字段的值,该值也没有改变。

场景.brs

sub playLive()
    m.livePlaybackData = CreateObject("roSGNode", "FetchPlaybackDetails")
    m.livePlaybackNode.observeField("playbackDetails", "didReceivePlaybackDetails")     
    m.livePlaybackNode.control = "RUN"  
end sub

sub didReceivePlaybackDetails()
    videoContent = createObject("RoSGNode", "ContentNode")
    videoContent.url = m.livePlaybackNode.playbackDetails.pUrl
    videoContent.title = "Test Video"
    videoContent.streamformat = "dash"

    m.video.content = videoContent
    m.video.visible = true
    m.video.setFocus(true)
    m.video.control = "play"
    m.video.observeField("state", "OnVideoPlayerStateChange")
    m.playbackHeartbeatTimer.control = "start"
    m.playbackHeartbeatTimer.ObserveField("fire","updateHeartbeat")
end sub

sub updateHeartbeat()
    m.heartbeatNode.setField("liveStreamToken", m.livePlaybackNode.playbackDetails.streamToken)
    m.heartbeatNode.observeField("heartbeatContent", "didReceiveHeartbeatContent")
    m.heartbeatNode.control = "RUN"
end sub

sub didReceiveHeartbeatContent()
    m.livePlaybackNode.playbackDetails.AddReplace("streamToken", m.heartbeatNode.heartbeatContent.streamToken)
    ?m.livePlaybackNode.playbackDetails.streamToken
end sub

在 didReceiveHeartbeatContent() 中,我试图用 heartbeatContent 的 streamToken 更改playbackDetails 中的streamToken 值。但价值没有改变。

playDetails 和 heartbeatContent 是我在 XML 文件中定义的 roAssociativeArrays,设置值如下。

<?xml version="1.0" encoding="utf-8" ?>

<component name = "FetchPlaybackDetails" extends = "Task" >

<interface>
    <field id="playbackDetails" type="assocarray" />
</interface>
</component>

<?xml version="1.0" encoding="utf-8" ?>

<component name = "UpdateHeartbeat" extends = "Task" >

<interface>
    <field id="liveStreamToken" type="string" />
    <field id="heartbeatContent" type="assocarray" />
</interface>

</component>

谁能建议我如何更改playbackDetails中一个文件的值?

标签: rokubrightscript

解决方案


作为节点字段的关联数组是不可变的,这意味着它们的内容不能更改。

您必须覆盖整个对象:

playbackDetails = m.livePlaybackNode.playbackDetails
playbackDetails.streamToken = m.heartbeatNode.heartbeatContent.streamToken
m.livePlaybackNode.playbackDetails = playbackDetails

或者您可以使用节点而不是关联数组。


推荐阅读