全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1312
推到 Plurk!
推到 Facebook!

MultiDevice用TmediaplayerControl播放影片會出現沒有回應

缺席
pcernet
初階會員


發表:68
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-05-06 19:06:33 IP:59.120.xxx.xxx 訂閱
用 FMX 的 TMediaplayer + TmediaplayerControl 播放 mp4 影片,TMediaplayer可以順利反覆的操作,都很正常,但使用 TmediaplayerControl 顯示影片的畫面就會有問題,第一部影片都能正常播放,但二部接著播放,不是顯示Access Violation...,就是會開始失控,接著不久後螢幕顯示沒有回應,嘗試把 TmediaplayerControl 釋放,然後再動態建立,結果還是一樣,在Windows環境下則沒有這個問題,不知道有沒有先進也遇到這個問題,謝謝!
pcernet
初階會員


發表:68
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-05-15 20:13:00 IP:59.120.xxx.xxx 訂閱
解決紀錄:
1.播過影片後使用 TMediaplayer.Clear 會造成系統沒有回應的問題,所以不能使用。
2.播完影片後,先將 Tmediaplayercontrol 刪除,等要播放時再重建,即可以解決若干問題
if (assigned(mediaplayercontrol1)) then freeandnil(mediaplayercontrol1);
目前已經能成功的連續播放影片。

後續問題:
1.影片畫面會殘留在螢幕上,即使已經刪除 Tmediaplayercontrol 控件了,螢幕一樣會殘留剛剛的影片畫面,怎麼清都清不掉,用了 Canvas.Clear 或是 repaint 也沒效果
2.TMediaPlayer播完影片後,再播音檔,則會出現 access violation 的問題,設定TMediaPlayerControl.Mediaplayer:=nil 更會直接崩潰,
所以目前只能使用兩個 TMediaPlayer 分開播放影片或音樂來解決。

雜記:
原本想放棄 Tmediaplayercontrol,改用 Twebbrowser 以 HTML5 video 來播放,倒也順利,但 FMX.webbrowser 只能往網頁裡送值,卻不能獲取網頁中各Tag的值,即使改用 FMX.WebbrowserEX 也不行,
這樣就不能監控播放的進度進行連續播放了,所以最後只好作罷。
P.D.
版主


發表:571
回覆:3881
積分:3666
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-05-17 12:33:26 IP:118.169.xxx.xxx 未訂閱
或許用 xe8 就不會有這個問題, 但我沒用過你的元件, 我只能猜測, 要不你就找到 xe8 試試看, 要不弄一個有問題的簡單程式丟上來, 讓有xe8的幫你測測看
pcernet
初階會員


發表:68
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-05-18 08:34:24 IP:59.120.xxx.xxx 訂閱
謝謝P.D.,小弟用的是XE8,其實程式沒什麼,就只是按下TButton的Click之後,隨機取個mp4欓,接著設定TMediaplayer的FileName然後Play,重點是播放後,TMediaplayercontrol 好像會記憶影片畫面,再按一次TButton的Click,播下個影片就會產生問題。

[code delphi]
unit Unit1;

interface

uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,FMX.Platform.Android,Androidapi.JNI.VideoView,Androidapi.JNI.Media,
FMX.Controls.Presentation, FMX.StdCtrls, FMX.Media, FMX.Layouts,AndroidApi.Log,
AndroidApi.Jni.JavaTypes, FMX.Helpers.Android;


type
TForm1 = class(TForm)
MediaPlayer1: TMediaPlayer;
Button1: TButton;
Layout1: TLayout;
MediaPlayerControl1: TMediaPlayerControl; //設定 Mediaplayer:=Mediaplayer1; Parent:=Layout1
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }

end;

var
Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
function getvideo(pn:string):string;
var srd: TSearchRec;
ns:tstringlist;
begin
result:='';
ns:=tstringlist.Create;
if FindFirst(pn '*.mp4', faAnyFile-faDirectory , srd)=0 then
repeat
ns.Add(srd.Name);
until FindNext(srd) <> 0;
FindClose(srd);
if ns.Count>0 then begin
randomize;
result:=pn ns.Strings[random(ns.Count-1)];
end;
ns.DisposeOf;
end;

var fn:string;
begin
if MediaPlayer1.State=TMediaState.Playing then mediaplayer1.Stop;
fn:=getvideo('/video/');
if fn<>'' then begin
MediaPlayer1.Clear;
mediaplayer1.FileName:=fn;
MediaPlayer1.Play;
end;
end;


end.

[/code]
編輯記錄
pcernet 重新編輯於 2015-05-18 08:36:51, 註解 程式碼編排有問題‧
pcernet 重新編輯於 2015-05-18 08:39:29, 註解 無‧
P.D.
版主


發表:571
回覆:3881
積分:3666
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-05-18 16:51:23 IP:59.120.xxx.xxx 未訂閱
有機會的話, 我幫你測測看
pcplayer99
尊榮會員


發表:142
回覆:738
積分:591
註冊:2003-01-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-05-26 18:32:06 IP:120.236.xxx.xxx 訂閱
XE7 的 MediaPlayer 有这个问题。导致根本没法使用。我还以为是大陆的手机的 Android 不是 Google 原来的(大陆手机的系统都被修改定制过)导致的。
系統時間:2017-10-24 1:06:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!