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

6 visualizzazioni (ultimi 30 giorni)
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

Risposta accettata

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

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su File Operations in Help Center e File Exchange

Prodotti


Release

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by