MultiDevice用TmediaplayerControl播放影片會出現沒有回應 |
缺席
|
pcernet
初階會員 發表:69 回覆:113 積分:41 註冊:2002-11-29 發送簡訊給我 |
用 FMX 的 TMediaplayer + TmediaplayerControl 播放 mp4 影片,TMediaplayer可以順利反覆的操作,都很正常,但使用 TmediaplayerControl 顯示影片的畫面就會有問題,第一部影片都能正常播放,但二部接著播放,不是顯示Access Violation...,就是會開始失控,接著不久後螢幕顯示沒有回應,嘗試把 TmediaplayerControl 釋放,然後再動態建立,結果還是一樣,在Windows環境下則沒有這個問題,不知道有沒有先進也遇到這個問題,謝謝!
|
pcernet
初階會員 發表:69 回覆:113 積分:41 註冊:2002-11-29 發送簡訊給我 |
解決紀錄:
1.播過影片後使用 TMediaplayer.Clear 會造成系統沒有回應的問題,所以不能使用。 2.播完影片後,先將 Tmediaplayercontrol 刪除,等要播放時再重建,即可以解決若干問題 if (assigned(mediaplayercontrol1)) then freeandnil(mediaplayercontrol1); 目前已經能成功的連續播放影片。 後續問題: 影片畫面會殘留在螢幕上,即使已經刪除 Tmediaplayercontrol 控件了,螢幕一樣會殘留剛剛的影片畫面,怎麼清都清不掉,用了 Canvas.Clear 或是 repaint 也沒效果2.TMediaPlayer播完影片後,再播音檔,則會出現 access violation 的問題,設定TMediaPlayerControl.Mediaplayer:=nil 更會直接崩潰, 所以目前只能使用兩個 TMediaPlayer 分開播放影片或音樂來解決。 雜記: 原本想放棄 Tmediaplayercontrol,改用 Twebbrowser 以 HTML5 video 來播放,倒也順利,但 FMX.webbrowser 只能往網頁裡送值,卻不能獲取網頁中各Tag的值,即使改用 FMX.WebbrowserEX 也不行, 這樣就不能監控播放的進度進行連續播放了,所以最後只好作罷。 |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
pcernet
初階會員 發表:69 回覆:113 積分:41 註冊:2002-11-29 發送簡訊給我 |
謝謝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] |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |