Android实例-MediaPlayer播放音乐和视频(XE8+小米2)

Android实例-MediaPlayer播放音乐和视频(XE8+小米2)_编程

 

结果:

1.播放视频需要手动放入MediaPlayerControl1控件,设置MediaPlayerControl1.MediaPlayer := MediaPlayer1;

2.播放声音文件正常,但播放器视时发现,第一边正常第二边就报错了(哪位大神知道的,请M我哦,先谢谢了)。

3.打包时需要打入MP3与MP4文件,路径为"assets\internal\"。

PS:20160421用XE10编译在夜神上一切正常,但在小米手机2上第一边正常,第二边卡,但不报错了。

 

实例代码:

  1 unit Unit1;
  2 
  3 interface
  4 
  5 uses
  6   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  7   FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  8   FMX.Controls.Presentation, FMX.StdCtrls, FMX.Media, FMX.Layouts;
  9 
 10 type
 11   TForm1 = class(TForm)
 12     MediaPlayer1: TMediaPlayer;
 13     Label1: TLabel;
 14     Timer1: TTimer;
 15     Layout2: TLayout;
 16     Layout3: TLayout;
 17     Button1: TButton;
 18     Button2: TButton;
 19     Button3: TButton;
 20     TrackBar1: TTrackBar;
 21     TrackBar2: TTrackBar;
 22     Label2: TLabel;
 23     Label3: TLabel;
 24     Layout4: TLayout;
 25     MediaPlayerControl1: TMediaPlayerControl;
 26     Layout1: TLayout;
 27     procedure Button1Click(Sender: TObject);
 28     procedure Button2Click(Sender: TObject);
 29     procedure TrackBar1Change(Sender: TObject);
 30     procedure Timer1Timer(Sender: TObject);
 31     procedure Button3Click(Sender: TObject);
 32     procedure TrackBar2Change(Sender: TObject);
 33     procedure FormCreate(Sender: TObject);
 34   private
 35     { Private declarations }
 36   public
 37     { Public declarations }
 38   end;
 39 
 40 var
 41   Form1: TForm1;
 42 
 43 implementation
 44 uses
 45   System.IOUtils;//需要引入
 46 {$R *.fmx}
 47 {$R *.NmXhdpiPh.fmx ANDROID}
 48 
 49 //执行暂停按钮
 50 procedure TForm1.Button1Click(Sender: TObject);
 51 begin
 52   MediaPlayer1.Stop;
 53   Timer1.Enabled := false;
 54   Button2.Enabled := true;
 55   Button1.Enabled := false;
 56 end;
 57 
 58 //执行播放按钮
 59 procedure TForm1.Button2Click(Sender: TObject);
 60 begin
 61   MediaPlayer1.FileName := TPath.GetDocumentsPath + '/abc.mp3';//指定要打开的文件当然,指定 SD 卡中其它目录是文件也是可以的。
 62   MediaPlayer1.CurrentTime := trunc((TrackBar1.Value * MediaPlayer1.Duration) / 100);// 播放进度调整为进度条指示位置
 63   MediaPlayer1.Volume := TrackBar2.Value;//音量也调整到音量指示值
 64   MediaPlayer1.Play;//播放
 65   Timer1.Enabled := true;
 66   Button2.Enabled := false;
 67   Button1.Enabled := true;
 68 end;
 69 
 70 procedure TForm1.Button3Click(Sender: TObject);
 71 begin
 72   MediaPlayer1.FileName := IncludeTrailingPathDelimiter(TPath.GetDocumentsPath) + 'abc.mp4';//指定要播放的视频文件
 73   MediaPlayer1.Play;
 74   Timer1.Enabled := true;
 75 end;
 76 
 77 //设置视频在哪里显示
 78 procedure TForm1.FormCreate(Sender: TObject);
 79 begin
 80   MediaPlayerControl1.MediaPlayer := MediaPlayer1;
 81 end;
 82 
 83 procedure TForm1.Timer1Timer(Sender: TObject);
 84 var
 85   handler: TNotifyEvent;
 86 begin
 87   handler := TrackBar1.OnChange;
 88   TrackBar1.OnChange := nil;//暂时取消其 OnChange 事件
 89   TrackBar1.Value := int((MediaPlayer1.CurrentTime / MediaPlayer1.Duration) * 100);
 90   //更新进度条的指示
 91   Label2.Text := inttostr(trunc(MediaPlayer1.CurrentTime / 60000)) + ':' +
 92   inttostr(trunc(MediaPlayer1.CurrentTime / 1000 -
 93   trunc(MediaPlayer1.CurrentTime / 60000) * 60));
 94   //显示声音文件所剩下的播放时间,分:秒
 95   Label3.Text := inttostr(trunc(MediaPlayer1.Duration / 60000)) + ':' +
 96   inttostr(trunc(MediaPlayer1.Duration / 1000 - trunc(MediaPlayer1.Duration /
 97   60000) * 60));//显示声音文件总的播放时间,分:秒
 98   TrackBar1.OnChange := handler; //还原其 OnChange 事件
 99   //播放完毕后的处理
100   if MediaPlayer1.CurrentTime >= MediaPlayer1.Duration - 1000 then//如果播放完了
101   begin
102     MediaPlayer1.Stop;
103     TrackBar1.Value:=0;
104     Button2.Enabled := true;
105     Button1.Enabled := false;
106     Timer1.Enabled := false;
107   end;
108 end;
109 
110 //滑动进度条时,改变播放进度
111 procedure TForm1.TrackBar1Change(Sender: TObject);
112 begin
113   MediaPlayer1.CurrentTime := trunc((TrackBar1.Value * MediaPlayer1.Duration) / 100);
114 end;
115 
116 //滑动音量调节条时,改变播放音量
117 procedure TForm1.TrackBar2Change(Sender: TObject);
118 begin
119   MediaPlayer1.Volume := TrackBar2.Value;
120 end;
121 
122 end.