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

42 views (last 30 days)
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

Accepted Answer

Kevin Chng
Kevin Chng on 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 Comments
Umair Mughal
Umair Mughal on 13 May 2020
The best solution of stop is to use globals... Thanks..
Jesper Ankersen
Jesper Ankersen on 8 Sep 2022
Are you using the regular button or state button for this application ?

Sign in to comment.

More Answers (0)

Categories

Find more on Startup and Shutdown in Help Center and File Exchange

Products


Release

R2018a

Community Treasure Hunt

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

Start Hunting!