Advertisement
Guest User

Untitled

a guest
Nov 9th, 2019
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.01 KB | None | 0 0
  1. package com.webmons.disono.p2pPlayer;
  2.  
  3. //adb logcat -b crash
  4. //adb logcat -c
  5.  
  6. import android.app.Activity;
  7. import android.os.Bundle;
  8. import android.widget.Button;
  9. import android.widget.TextView;
  10.  
  11. import com.dueeeke.videocontroller.StandardVideoController;
  12. import com.dueeeke.videoplayer.exo.ExoMediaPlayerFactory;
  13. import com.dueeeke.videoplayer.ijk.IjkPlayerFactory;
  14. import com.dueeeke.videoplayer.player.AndroidMediaPlayerFactory;
  15. import com.dueeeke.videoplayer.player.VideoView;
  16.  
  17. import com.cdnbye.sdk.ChannelIdCallback;
  18. import com.cdnbye.sdk.P2pEngine;
  19. import com.cdnbye.sdk.P2pConfig;
  20. import com.cdnbye.sdk.P2pStatisticsListener;
  21. import com.cdnbye.sdk.LogLevel;
  22.  
  23. import org.json.JSONException;
  24. import org.json.JSONObject;
  25.  
  26. import java.util.List;
  27. import java.util.logging.Logger;
  28.  
  29. import android.content.Context;
  30. import android.content.Intent;
  31. import android.content.IntentFilter;
  32. import android.content.BroadcastReceiver;
  33. import android.content.pm.ActivityInfo;
  34.  
  35. import android.view.Window;
  36. import android.view.WindowManager;
  37. import android.view.KeyEvent;
  38. import android.view.View;
  39.  
  40. public class P2PActivity extends Activity {
  41.  
  42. private Activity activity;
  43.  
  44. public static final String BROADCAST_LISTENER = "com.webmons.disono.p2pPlayer.Listener";
  45.  
  46. private VideoView videoView;
  47. private StandardVideoController controller;
  48.  
  49. private String VOD = "";
  50. private String LIVE = "";
  51.  
  52. private Button replayBtn;
  53. private Button switchBtn;
  54. private Button vodBtn;
  55. private Button liveBtn;
  56. private String currentUrl = VOD;
  57. // private String currentUrl = LIVE;
  58.  
  59. private double totalHttpDownloaded = 0;
  60. private double totalP2pDownloaded = 0;
  61. private double totalP2pUploaded = 0;
  62.  
  63. private String _url;
  64.  
  65. @Override
  66. protected void onCreate(Bundle savedInstanceState) {
  67.  
  68. super.onCreate(savedInstanceState);
  69.  
  70. activity = this;
  71.  
  72. _broadcastRCV();
  73.  
  74. Intent intent = getIntent();
  75. _url = intent.getStringExtra("url");
  76.  
  77. VOD = _url;
  78. LIVE = _url;
  79. currentUrl = _url;
  80.  
  81. getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  82. this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  83. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
  84. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
  85.  
  86. //.SEPARATOR.//
  87.  
  88. setContentView(getResources().getIdentifier("p2p_player", "layout", getPackageName()));
  89. TextView versionV = findViewById(getResources().getIdentifier("version", "id", getPackageName()));
  90. versionV.setText("Version: " + P2pEngine.Version);
  91.  
  92. P2pConfig config = new P2pConfig.Builder()
  93. .p2pEnabled(false)
  94. .logEnabled(true)
  95. .logLevel(LogLevel.DEBUG)
  96. .build();
  97. P2pEngine engine = P2pEngine.initEngine(getApplicationContext(), "free", config);
  98. engine.addP2pStatisticsListener(new P2pStatisticsListener() {
  99. @Override
  100. public void onHttpDownloaded(long value) {
  101. totalHttpDownloaded += (double)value;
  102. refreshRatio();
  103. checkIfConnected();
  104. }
  105.  
  106. @Override
  107. public void onP2pDownloaded(long value) {
  108. totalP2pDownloaded += (double)value;
  109. runOnUiThread(new Runnable() {
  110. @Override
  111. public void run() {
  112. TextView offloadV = findViewById(getResources().getIdentifier("offload", "id", getPackageName()));
  113. String text = String.format("Offload: %.2fMB", totalP2pDownloaded/1024);
  114. offloadV.setText(text);
  115.  
  116. refreshRatio();
  117. }
  118. });
  119. checkIfConnected();
  120. }
  121.  
  122. @Override
  123. public void onP2pUploaded(long value) {
  124. totalP2pUploaded += (double)value;
  125. runOnUiThread(new Runnable() {
  126. @Override
  127. public void run() {
  128. TextView uploadV = findViewById(getResources().getIdentifier("upload", "id", getPackageName()));
  129. String text = String.format("Upload: %.2fMB", totalP2pUploaded/1024);
  130. uploadV.setText(text);
  131. }
  132. });
  133. checkIfConnected();
  134. }
  135.  
  136. @Override
  137. public void onPeers(List<String> peers) {
  138. runOnUiThread(new Runnable() {
  139. @Override
  140. public void run() {
  141. TextView peersV = findViewById(getResources().getIdentifier("peers", "id", getPackageName()));
  142. String text = String.format("Peers: %d", peers.size());
  143. peersV.setText(text);
  144. }
  145. });
  146. checkIfConnected();
  147. }
  148. });
  149.  
  150. startPlay(currentUrl);
  151.  
  152. replayBtn = findViewById(getResources().getIdentifier("replay", "id", getPackageName()));
  153. switchBtn = findViewById(getResources().getIdentifier("switcher", "id", getPackageName()));
  154. vodBtn = findViewById(getResources().getIdentifier("vod", "id", getPackageName()));
  155. liveBtn = findViewById(getResources().getIdentifier("live", "id", getPackageName()));
  156.  
  157. replayBtn.setOnClickListener(new View.OnClickListener() {
  158. @Override
  159. public void onClick(View view) {
  160. // 清空数据
  161. clearData();
  162. startPlay(currentUrl);
  163. }
  164. });
  165.  
  166. switchBtn.setOnClickListener(new View.OnClickListener() {
  167. @Override
  168. public void onClick(View view) {
  169. if (currentUrl.equals(VOD)) {
  170. currentUrl = LIVE;
  171. } else {
  172. currentUrl = VOD;
  173. }
  174. // 清空数据
  175. clearData();
  176. startPlay(currentUrl);
  177. }
  178. });
  179. vodBtn.setOnClickListener(new View.OnClickListener() {
  180. @Override
  181. public void onClick(View view) {
  182. // 清空数据
  183. clearData();
  184. currentUrl = VOD;
  185. startPlay(currentUrl);
  186. }
  187. });
  188.  
  189. liveBtn.setOnClickListener(new View.OnClickListener() {
  190. @Override
  191. public void onClick(View view) {
  192. // 清空数据
  193. clearData();
  194. currentUrl = LIVE;
  195. startPlay(currentUrl);
  196. }
  197. });
  198. }
  199.  
  200. BroadcastReceiver br = new BroadcastReceiver() {
  201.  
  202. @Override
  203. public void onReceive(Context context, Intent intent) {
  204. if (intent != null) {
  205. String method = intent.getStringExtra("method");
  206.  
  207. if (method != null) {
  208. switch (method) {
  209. case "pause":
  210. if (videoView.isPlaying()) {
  211. videoView.pause();
  212. }
  213.  
  214. break;
  215. case "resume":
  216. if (!videoView.isPlaying()) {
  217. videoView.resume();
  218. }
  219.  
  220. break;
  221. case "release":
  222. videoView.release();
  223. break;
  224. }
  225. }
  226. }
  227. }
  228. };
  229.  
  230. private void _broadcastRCV() {
  231. IntentFilter filter = new IntentFilter(VideoPlayerP2P.BROADCAST_METHODS);
  232. activity.registerReceiver(br, filter);
  233. }
  234.  
  235. private void _sendBroadCast(String methodName) {
  236. Intent intent = new Intent();
  237. intent.setAction(BROADCAST_LISTENER);
  238. intent.putExtra("method", methodName);
  239. activity.sendBroadcast(intent);
  240. }
  241.  
  242. private void _sendBroadCast(String methodName, JSONObject object) {
  243. Intent intent = new Intent();
  244. intent.setAction(BROADCAST_LISTENER);
  245. intent.putExtra("method", methodName);
  246. intent.putExtra("data", object.toString());
  247. activity.sendBroadcast(intent);
  248. }
  249.  
  250.  
  251. private void startPlay(String url) {
  252. String parsedUrl = P2pEngine.getInstance().parseStreamUrl(url);
  253. videoView = findViewById(getResources().getIdentifier("player", "id", getPackageName()));
  254.  
  255. videoView.setFocusable(true);
  256. videoView.setFocusableInTouchMode(true);
  257.  
  258. videoView.release();
  259. videoView.setUrl(parsedUrl); //设置视频地址
  260.  
  261. // 使用IjkPlayer解码
  262. // videoView.setPlayerFactory(IjkPlayerFactory.create(this));
  263. // 使用ExoPlayer解码
  264. videoView.setPlayerFactory(ExoMediaPlayerFactory.create(this));
  265. // 使用MediaPlayer解码
  266. // videoView.setPlayerFactory(AndroidMediaPlayerFactory.create(this));
  267.  
  268. if (controller == null) {
  269. controller = new StandardVideoController(this);
  270. }
  271.  
  272. videoView.setVideoController(controller); //设置控制器,如需定制可继承BaseVideoController
  273. videoView.start();
  274. }
  275.  
  276. private void checkIfConnected() {
  277. runOnUiThread(new Runnable() {
  278. @Override
  279. public void run() {
  280. TextView connectedV = findViewById(getResources().getIdentifier("connected", "id", getPackageName()));
  281. String text = String.format("Connected: %s", P2pEngine.getInstance().isConnected()?"Yes":"No");
  282. connectedV.setText(text);
  283.  
  284. TextView peerIdV = findViewById(getResources().getIdentifier("peerId", "id", getPackageName()));
  285. String text2 = String.format("Peer ID: %s", P2pEngine.getInstance().getPeerId());
  286. peerIdV.setText(text2);
  287. }
  288. });
  289. }
  290.  
  291. private void refreshRatio() {
  292. runOnUiThread(new Runnable() {
  293. @Override
  294. public void run() {
  295. double ratio = 0;
  296. if (totalHttpDownloaded+totalP2pDownloaded != 0) {
  297. ratio = totalP2pDownloaded/(totalHttpDownloaded+totalP2pDownloaded);
  298. }
  299. TextView ratioV = findViewById(getResources().getIdentifier("ratio", "id", getPackageName()));
  300. String text = String.format("P2P Ratio: %.0f%%", ratio*100);
  301. ratioV.setText(text);
  302. }
  303. });
  304. }
  305.  
  306. private void clearData() {
  307. totalHttpDownloaded = 0;
  308. totalP2pDownloaded = 0;
  309. totalP2pUploaded = 0;
  310. checkIfConnected();
  311. refreshRatio();
  312. }
  313.  
  314. @Override
  315. protected void onPause() {
  316. super.onPause();
  317. videoView.pause();
  318. _sendBroadCast("onPause");
  319. }
  320.  
  321. @Override
  322. protected void onResume() {
  323. super.onResume();
  324. videoView.resume();
  325. _sendBroadCast("onResume");
  326. }
  327.  
  328. @Override
  329. protected void onDestroy() {
  330. super.onDestroy();
  331. videoView.release();
  332. _sendBroadCast("onDestroy");
  333. }
  334.  
  335. @Override
  336. public boolean onKeyDown(int keyCode, KeyEvent event) {
  337. JSONObject obj = new JSONObject();
  338. try {
  339. obj.put("keyCode", keyCode);
  340. if (keyCode == KeyEvent.KEYCODE_BACK) {
  341. obj.put("isBackCode", true);
  342. } else {
  343. obj.put("isBackCode", false);
  344. }
  345. } catch (JSONException e) {
  346. e.printStackTrace();
  347. }
  348. _sendBroadCast("onKeyDown", obj);
  349. return super.onKeyDown(keyCode, event);
  350. }
  351.  
  352. @Override
  353. public boolean onKeyUp(int keyCode, KeyEvent event) {
  354. JSONObject obj = new JSONObject();
  355. try {
  356. obj.put("keyCode", keyCode);
  357. if (keyCode == KeyEvent.KEYCODE_BACK) {
  358. obj.put("isBackCode", true);
  359. } else {
  360. obj.put("isBackCode", false);
  361. }
  362. } catch (JSONException e) {
  363. e.printStackTrace();
  364. }
  365. _sendBroadCast("onKeyUp", obj);
  366. return super.onKeyUp(keyCode, event);
  367. }
  368. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement