如何使用使用spmd复合对象吗

16个视图(30天)
哈拉Nagi
哈拉Nagi 2022年10月17日
评论道: 哈拉Nagi2022年10月18日
我试图使用spmd并行计算功能实现视频点播。我有一个保存的视频编码在3种不同的品质和划分为3第二段,我试图保存视频帧的视频缓冲区(模仿结构),同时播放缓冲以恒定速率的24帧每秒。每一段的质量必须选择基于缓冲水平。然而,我的错误”错误发现工人1。下标赋值之间的不同结构”运行下面的代码:
mov =结构;%的视频缓冲区
bufsize =长度(mov);%缓冲水平
spmd
开关labindex
情况下1
segnum = 0;%段数
i = 1;
c = 1;
br = 20;假定信道带宽百分比Mbps
%检查最后一段数和段从文件名称
res = [“低”“中”“样本”];%可用的决议金宝搏官方网站
resnum = 1;
文件名= sprintf (“% sdash.m3u8”res (resnum));
s = importdata(文件名);
lastseg = s {end-1 1};
[lastsegnum n犯错]= sscanf (lastseg (res (resnum) +' % d.ts '));
%获得最高质量的帧的大小
vidobj = VideoReader (“sampledash1.ts”);
v =阅读(vidobj, 1);
framesize =大小(v);
%得到下一段适当的质量
segnum < = lastsegnum
如果bufsize < 72% 24 fps * 3秒= 72帧在一段
resnum = 1;
elseifbufsize > = 72 & & br < 216
resnum = 2;
elseifbufsize > = 216
resnum = 3;
结束
段= sprintf (“% sdash % d.ts”res (resnum), segnum);
vidobj = VideoReader(段);
f = dir(段);
fsz = f.bytes;%的段
x =兰德;
延迟= ((fsz * 8) / (br * 1 e6)) + x;%网络延迟
暂停(延迟);
hasFrame (vidobj)
mov (c) = im2frame (readFrame (vidobj));
mov (c)。cdata = imresize (mov (c) .cdata, [framesize (1) framesize (2)));
labSend (mov (c) .cdata labindex + 1, 11);
bufsize = bufsize + 1;
c = c + 1;
结束
labSend (segnum labindex + 1 12);
segnum = segnum + 1;
结束
情况下2
depvid = vision.DeployableVideoPlayer (“大小”,“全屏”);
i = 1;
~ isempty (mov)%之后才开始播放视频前两段已经下载
帧= labReceive (labindex-1 11);
segnum = labReceive (labindex-1 12);
视频(我)。cdata =框架;
我=我+ 1;
如果segnum > 1
步骤(depvid, vid (1) .cdata)
暂停(1/24)
视频(1)= [];
我张=;
结束
结束
结束
结束
我有点困惑为什么我得到这个错误。我认为这可能是由于复合对象创建的函数,但我不知道如何去做。

接受的答案

雷蒙德·诺里斯
雷蒙德·诺里斯 2022年10月17日
这不是与你并行代码,初始化的问题 mov 。这可以由下面的复制
函数nagi
mov =结构();
% mov。cdata = [];
% mov。colormap = [];
M。cdata = 1(240320年3“uint8”);
M。colormap = [];
mov (1) = M;
所以这里被绊倒
mov (c) = im2frame (readFrame (vidobj));
如果你初始化 mov 当我说出来,你会没事的。
注:我假设在某种程度上,labindex 1不会有什么送labindex 2,对吗?如果是这样,你将遇到的问题labindex 2是继续等待收到labindex 1。记住,对于labindex 2, mov 从来都不是空的。对于所有意图和目的,它只看到
mov =结构;
(但是你初始化)。因此,某些时候,MATLAB将抛出
一个交流失配误差是遇到:
其他实验室在labReceive变得空闲。
“其他实验室”在这种情况下是labindex 1。
3评论
哈拉Nagi
哈拉Nagi 2022年10月18日
那工作!非常感谢你那么多! !

登录置评。

更多的答案(0)

类别

找到更多的在启动和关闭帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!