Play, Pause, Rewind, and Fast Forward Buttons (App Designer)

8 vues (au cours des 30 derniers jours)
Ledoux Laboratory
Ledoux Laboratory le 4 Sep 2018
I am using the app designer and was wondering about implementing Play, Pause, Rewind, and Fast Forward buttons. Right now I do not have these features implemented - I just have a video playing using a combination of VideoReader, hasFrame, readFrame, and imshow functions. Here is my code:
filename = vidfile;
v = VideoReader(filename);
frame = 0;
app.OffsetFrameNumberEditField.Value = offsets(index);
ix = 1;
x = 1;
while hasFrame(v)
frame = frame + 1;
app.AbsoluteFrameNumberEditField.Value = frame;
app.OffsetFrameNumberEditField.Value = frame+offsets(index);
if frame == 1
cla(app.Video)
fig = imshow(readFrame(v), 'Parent', app.Video);
else
set(fig,'CData',readFrame(v))
end
if ge(frame,range(1)) && le(frame,range(end))
if x == 1
SP = scatter(app.SagittalAxes,dataS(ix,1), dataS(ix,4),'MarkerFaceColor','k','MarkerEdgeColor','k');
FP = scatter(app.FrontalAxes,dataF(ix,1), dataF(ix,4),'MarkerFaceColor','k','MarkerEdgeColor','k');
TP = scatter(app.TransverseAxes,dataT(ix,1), dataT(ix,4),'MarkerFaceColor','k','MarkerEdgeColor','k');
x = x+1;
else
set(SP,'XData',dataS(ix,1))
set(SP,'YData',dataS(ix,4))
set(FP,'XData',dataF(ix,1))
set(FP,'YData',dataF(ix,4))
set(TP,'XData',dataT(ix,1))
set(TP,'YData',dataT(ix,4))
end
ix = ix+1;
end
pause(0.005)
end

Réponse acceptée

Kevin Chng
Kevin Chng le 5 Sep 2018
Hi, your question is really interesting. You may consider my solution as follows
It is including play, pause, resume,speed up,slow down, forward and rewind/backward.
button :
function play(app,event)
global numFrames pauseS stop speed iter
pauseS=true
stop = true
speed = 1
% Count the number of frames
numFrames = 1;
v = VideoReader('song.mp4')
while hasFrame(v)
readFrame(v)
numFrames = numFrames +1;
end
v= VideoReader('song.mp4)
iter=1;
while(1)
frame = read(v,iter)
imshow(frame,'Parent',app.UIAxes'); % You may use button to host the image
drawnow
% here for slow down and speed up
if speed ==1
elseif speed==2
pause(0.0001);
elseif speed ==3
pause(0.1)
elseif spped==4
pause(1)
end
% Here for pause and resume
if pauseS == false
while(1)
pause(0.001);
if pauseS == true
break;
end
end
end
% Stop playing
if stop == false
break;
end
iter = iter+1;
% If frame is finished, break
if iter>numFrames
break;
end
end
Pause Button :
function pause(app, event)
global pauseS
if pauseS==true
pauseS=false;
else
pauseS=true;
end
end
Stop Button :
function stop(app, event)
global stop
stop=false;
end
Speed Up and Slow Down Button :
function speedup(app,event)
global speed
if speed==2
speed=1;
elseif speed ==3
speed=2;
elseif speed ==4
speed=3;
end
end
function slowdown(app,event)
global speed
if speed ==1
speed=2;
elseif speed==2
speed=3;
elseif speed==3
speed=4;
end
end
forward and rewind button :
function forward(app,event)
global iter numFrames
if iter<(numFrames-100)
iter = iter +100;
end
end
function rewind(app,event)
global iter
if iter>100
iter=iter-100;
end
end
Let me know if you have any question. Kindly accept my answer if it is working for you.
  4 commentaires
Umair Mughal
Umair Mughal le 13 Mai 2020
The best solution of stop is to use globals... Thanks..
Jesper Ankersen
Jesper Ankersen le 8 Sep 2022
Are you using the regular button or state button for this application ?

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur File Operations dans Help Center et File Exchange

Produits


Version

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by