Flutter plugin for mofun flutter video.

Player.java 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. package com.fgodt.mixplayer;
  2. import android.content.Context;
  3. import java.util.ArrayList;
  4. /**
  5. * Created by rt-zl on 2019/2/15.
  6. */
  7. public class Player extends Render {
  8. public static final int STATUS_ERROR = 0;
  9. public static final int STATUS_STOP = 1;
  10. public static final int STATUS_START = 2;
  11. public static final int STATUS_PAUSE = 3;
  12. public static final int STATUS_BUFFING = 4;
  13. public static final int STATUS_RUNNING = 5;
  14. private Core mixCore;
  15. private Core enMixCore;
  16. private String url ;
  17. private mixPlayerCallBack callBack;
  18. private boolean needSelectAudioSource = false;
  19. public Player(Context context){
  20. super(context);
  21. }
  22. ArrayList<mixSource> mixSourceName = new ArrayList<mixSource>();
  23. private void addMixList(){
  24. if(mixCore == null){
  25. return;
  26. }
  27. for (mixSource source :mixSourceName){
  28. mixCore.addMixSource(source.name, source.startTime, source.duration);
  29. }
  30. }
  31. private void selectAudioSource(){
  32. if(mixCore == null){
  33. return;
  34. }
  35. for (mixSource source :mixSourceName){
  36. if(source.select){
  37. mixCore.selectAudioSource(source.name);
  38. }
  39. }
  40. }
  41. private void createCore(){
  42. if(mixCore != null){
  43. mixCore.mixClose();
  44. this.renderClose();
  45. }
  46. mixCore = new Core();
  47. mixCore.init(this);
  48. mixCore.setMixCall(callBack);
  49. addMixList();
  50. if(needSelectAudioSource){
  51. selectAudioSource();
  52. }
  53. }
  54. private void createEnCore(){
  55. if(enMixCore != null){
  56. enMixCore.mixClose();
  57. }
  58. enMixCore = new Core();
  59. }
  60. public void open(String url){
  61. createCore();
  62. this.url = url;
  63. mixCore.setUrl(url);
  64. new Thread(new Runnable() {
  65. @Override
  66. public void run() {
  67. mixCore.open();
  68. }
  69. }).start();
  70. }
  71. public void resume(){
  72. if(mixCore!=null){
  73. mixCore.resume();
  74. }
  75. ispause = false;
  76. }
  77. public void stop(){
  78. if(mixCore!=null){
  79. mixCore.mixClose();
  80. this.renderClose();
  81. }
  82. }
  83. public void pause(){
  84. if(mixCore!=null){
  85. mixCore.pause();
  86. }
  87. ispause = true;
  88. }
  89. public void seek(double time){
  90. if(mixCore != null){
  91. mixCore.seek(time);
  92. }
  93. }
  94. public void setMixCall(mixPlayerCallBack call){
  95. this.callBack = call;
  96. }
  97. public double getDuration(){
  98. if(mixCore!=null){
  99. return mixCore.mixGetDuration();
  100. }
  101. return -1;
  102. }
  103. public double getPlayTime(){
  104. double time = super.getPlaytime();
  105. return time;
  106. }
  107. public double getSaveTime(){
  108. return -1;
  109. }
  110. public void addMixSource(String name ,double stime, double duration){
  111. mixSource source = new mixSource();
  112. source.name = name;
  113. source.startTime = stime;
  114. source.duration = duration;
  115. source.select = false;
  116. mixSourceName.add(source);
  117. }
  118. public void saveFile(String input, String output){
  119. createCore();
  120. this.url = input;
  121. mixCore.setUrl(url);
  122. mixCore.setSavePath(output);
  123. mixCore.save();
  124. }
  125. public void selectAudioSource(String name){
  126. needSelectAudioSource = true;
  127. for(mixSource source : mixSourceName){
  128. if(source.name.equals(name)){
  129. source.select = true;
  130. }
  131. }
  132. }
  133. public int getStatus(){
  134. if(mixCore != null){
  135. return mixCore.getStatus();
  136. }
  137. return STATUS_STOP;
  138. }
  139. public void setVolume(float volume){
  140. this.volume = volume;
  141. }
  142. @Override
  143. protected void finalize() throws Throwable {
  144. super.finalize();
  145. if(mixCore!= null)
  146. mixCore.mixClose();
  147. }
  148. class mixSource{
  149. public String name;
  150. public double startTime;
  151. public double duration;
  152. public boolean select;
  153. }
  154. }