日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Android三种播放视频的方式

發布時間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android三种播放视频的方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?分類: ? Android多媒體(12)??Android應用層(93)?

在Android中,我們有三種方式來實現視頻的播放:

1、使用其自帶的播放器。指定Action為ACTION_VIEW,Data為Uri,Type為其MIME類型。

2、使用VideoView來播放。在布局文件中使用VideoView結合MediaController來實現對其控制。

3、使用MediaPlayer類和SurfaceView來實現,這種方式很靈活。

?

1、調用其自帶的播放器:

[java]?view plain?copy?print?
  1. Uri?uri?=?Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v");?????
  2. //調用系統自帶的播放器????
  3. ????Intent?intent?=?new?Intent(Intent.ACTION_VIEW);????
  4. ????Log.v("URI:::::::::",?uri.toString());????
  5. ????intent.setDataAndType(uri,?"video/mp4");????
  6. ????startActivity(intent);????

2、使用VideoView來實現:

[java]?view plain?copy?print?
  1. Uri?uri?=?Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v");????
  2. VideoView?videoView?=?(VideoView)this.findViewById(R.id.video_view);????
  3. videoView.setMediaController(new?MediaController(this));????
  4. videoView.setVideoURI(uri);????
  5. videoView.start();????
  6. videoView.requestFocus();????

3、使用MediaPlayer: [java]?view plain?copy?print?
  1. package?demo.camera;????
  2. import?java.io.IOException;????
  3. import?android.app.Activity;????
  4. import?android.media.MediaPlayer;????
  5. import?android.media.MediaPlayer.OnCompletionListener;????
  6. import?android.media.MediaPlayer.OnErrorListener;????
  7. import?android.media.MediaPlayer.OnInfoListener;????
  8. import?android.media.MediaPlayer.OnPreparedListener;????
  9. import?android.media.MediaPlayer.OnSeekCompleteListener;????
  10. import?android.media.MediaPlayer.OnVideoSizeChangedListener;????
  11. import?android.os.Bundle;????
  12. import?android.os.Environment;????
  13. import?android.util.Log;????
  14. import?android.view.Display;????
  15. import?android.view.SurfaceHolder;????
  16. import?android.view.SurfaceView;????
  17. import?android.widget.LinearLayout;????
  18. /**??
  19. ?*?該實例中使用MediaPlayer完成播放,同時界面使用SurfaceView來實現??
  20. ?*???
  21. ?*?這里我們實現MediaPlayer中很多狀態變化時的監聽器??
  22. ?*???
  23. ?*?使用Mediaplayer時,也可以使用MediaController類,但是需要實現MediaController.mediaController接口??
  24. ?*?實現一些控制方法。??
  25. ?*???
  26. ?*?然后,設置controller.setMediaPlayer(),setAnchorView(),setEnabled(),show()就可以了,這里不再實現??
  27. ?*?@author?Administrator??
  28. ?*??
  29. ?*/????
  30. public?class?VideoSurfaceDemo?extends?Activity?implements?OnCompletionListener,OnErrorListener,OnInfoListener,????
  31. ????OnPreparedListener,?OnSeekCompleteListener,OnVideoSizeChangedListener,SurfaceHolder.Callback{????
  32. ????private?Display?currDisplay;????
  33. ????private?SurfaceView?surfaceView;????
  34. ????private?SurfaceHolder?holder;????
  35. ????private?MediaPlayer?player;????
  36. ????private?int?vWidth,vHeight;????
  37. ????//private?boolean?readyToPlay?=?false;????
  38. ????????????
  39. ????public?void?onCreate(Bundle?savedInstanceState){????
  40. ????????super.onCreate(savedInstanceState);????
  41. ????????this.setContentView(R.layout.video_surface);????
  42. ????????????????????
  43. ????????surfaceView?=?(SurfaceView)this.findViewById(R.id.video_surface);????
  44. ????????//給SurfaceView添加CallBack監聽????
  45. ????????holder?=?surfaceView.getHolder();????
  46. ????????holder.addCallback(this);????
  47. ????????//為了可以播放視頻或者使用Camera預覽,我們需要指定其Buffer類型????
  48. ????????holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);????
  49. ????????????
  50. ????????//下面開始實例化MediaPlayer對象????
  51. ????????player?=?new?MediaPlayer();????
  52. ????????player.setOnCompletionListener(this);????
  53. ????????player.setOnErrorListener(this);????
  54. ????????player.setOnInfoListener(this);????
  55. ????????player.setOnPreparedListener(this);????
  56. ????????player.setOnSeekCompleteListener(this);????
  57. ????????player.setOnVideoSizeChangedListener(this);????
  58. ????????Log.v("Begin:::",?"surfaceDestroyed?called");????
  59. ????????//然后指定需要播放文件的路徑,初始化MediaPlayer????
  60. ????????String?dataPath?=?Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v";????
  61. ????????try?{????
  62. ????????????player.setDataSource(dataPath);????
  63. ????????????Log.v("Next:::",?"surfaceDestroyed?called");????
  64. ????????}?catch?(IllegalArgumentException?e)?{????
  65. ????????????e.printStackTrace();????
  66. ????????}?catch?(IllegalStateException?e)?{????
  67. ????????????e.printStackTrace();????
  68. ????????}?catch?(IOException?e)?{????
  69. ????????????e.printStackTrace();????
  70. ????????}????
  71. ????????//然后,我們取得當前Display對象????
  72. ????????currDisplay?=?this.getWindowManager().getDefaultDisplay();????
  73. ????}????
  74. ????????
  75. ????@Override????
  76. ????public?void?surfaceChanged(SurfaceHolder?arg0,?int?arg1,?int?arg2,?int?arg3)?{????
  77. ????????//?當Surface尺寸等參數改變時觸發????
  78. ????????Log.v("Surface?Change:::",?"surfaceChanged?called");????
  79. ????}????
  80. ????@Override????
  81. ????public?void?surfaceCreated(SurfaceHolder?holder)?{????
  82. ????????//?當SurfaceView中的Surface被創建的時候被調用????
  83. ????????//在這里我們指定MediaPlayer在當前的Surface中進行播放????
  84. ????????player.setDisplay(holder);????
  85. ????????//在指定了MediaPlayer播放的容器后,我們就可以使用prepare或者prepareAsync來準備播放了????
  86. ????????player.prepareAsync();????
  87. ????????????
  88. ????}????
  89. ????@Override????
  90. ????public?void?surfaceDestroyed(SurfaceHolder?holder)?{????
  91. ????????????
  92. ????????Log.v("Surface?Destory:::",?"surfaceDestroyed?called");????
  93. ????}????
  94. ????@Override????
  95. ????public?void?onVideoSizeChanged(MediaPlayer?arg0,?int?arg1,?int?arg2)?{????
  96. ????????//?當video大小改變時觸發????
  97. ????????//這個方法在設置player的source后至少觸發一次????
  98. ????????Log.v("Video?Size?Change",?"onVideoSizeChanged?called");????
  99. ????????????
  100. ????}????
  101. ????@Override????
  102. ????public?void?onSeekComplete(MediaPlayer?arg0)?{????
  103. ????????//?seek操作完成時觸發????
  104. ????????Log.v("Seek?Completion",?"onSeekComplete?called");????
  105. ????????????
  106. ????}????
  107. ????@Override????
  108. ????public?void?onPrepared(MediaPlayer?player)?{????
  109. ????????//?當prepare完成后,該方法觸發,在這里我們播放視頻????
  110. ????????????
  111. ????????//首先取得video的寬和高????
  112. ????????vWidth?=?player.getVideoWidth();????
  113. ????????vHeight?=?player.getVideoHeight();????
  114. ????????????
  115. ????????if(vWidth?>?currDisplay.getWidth()?||?vHeight?>?currDisplay.getHeight()){????
  116. ????????????//如果video的寬或者高超出了當前屏幕的大小,則要進行縮放????
  117. ????????????float?wRatio?=?(float)vWidth/(float)currDisplay.getWidth();????
  118. ????????????float?hRatio?=?(float)vHeight/(float)currDisplay.getHeight();????
  119. ????????????????
  120. ????????????//選擇大的一個進行縮放????
  121. ????????????float?ratio?=?Math.max(wRatio,?hRatio);????
  122. ????????????????
  123. ????????????vWidth?=?(int)Math.ceil((float)vWidth/ratio);????
  124. ????????????vHeight?=?(int)Math.ceil((float)vHeight/ratio);????
  125. ????????????????
  126. ????????????//設置surfaceView的布局參數????
  127. ????????????surfaceView.setLayoutParams(new?LinearLayout.LayoutParams(vWidth,?vHeight));????
  128. ????????????????
  129. ????????????//然后開始播放視頻????
  130. ????????????????
  131. ????????????player.start();????
  132. ????????}????
  133. ????}????
  134. ????@Override????
  135. ????public?boolean?onInfo(MediaPlayer?player,?int?whatInfo,?int?extra)?{????
  136. ????????//?當一些特定信息出現或者警告時觸發????
  137. ????????switch(whatInfo){????
  138. ????????case?MediaPlayer.MEDIA_INFO_BAD_INTERLEAVING:????
  139. ????????????break;????
  140. ????????case?MediaPlayer.MEDIA_INFO_METADATA_UPDATE:??????
  141. ????????????break;????
  142. ????????case?MediaPlayer.MEDIA_INFO_VIDEO_TRACK_LAGGING:????
  143. ????????????break;????
  144. ????????case?MediaPlayer.MEDIA_INFO_NOT_SEEKABLE:?????
  145. ????????????break;????
  146. ????????}????
  147. ????????return?false;????
  148. ????}????
  149. ????@Override????
  150. ????public?boolean?onError(MediaPlayer?player,?int?whatError,?int?extra)?{????
  151. ????????Log.v("Play?Error:::",?"onError?called");????
  152. ????????switch?(whatError)?{????
  153. ????????case?MediaPlayer.MEDIA_ERROR_SERVER_DIED:????
  154. ????????????Log.v("Play?Error:::",?"MEDIA_ERROR_SERVER_DIED");????
  155. ????????????break;????
  156. ????????case?MediaPlayer.MEDIA_ERROR_UNKNOWN:????
  157. ????????????Log.v("Play?Error:::",?"MEDIA_ERROR_UNKNOWN");????
  158. ????????????break;????
  159. ????????default:????
  160. ????????????break;????
  161. ????????}????
  162. ????????return?false;????
  163. ????}????
  164. ????@Override????
  165. ????public?void?onCompletion(MediaPlayer?player)?{????
  166. ????????//?當MediaPlayer播放完成后觸發????
  167. ????????Log.v("Play?Over:::",?"onComletion?called");????
  168. ????????this.finish();????
  169. ????}????
  170. }????

轉載于:https://www.cnblogs.com/android-blogs/p/5667661.html

總結

以上是生活随笔為你收集整理的Android三种播放视频的方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。