Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.webmons.disono.p2pPlayer;
- //adb logcat -b crash
- //adb logcat -c
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.Button;
- import android.widget.TextView;
- import android.widget.LinearLayout;
- import com.dueeeke.videocontroller.StandardVideoController;
- import com.dueeeke.videoplayer.exo.ExoMediaPlayerFactory;
- import com.dueeeke.videoplayer.ijk.IjkPlayerFactory;
- import com.dueeeke.videoplayer.player.AndroidMediaPlayerFactory;
- import com.dueeeke.videoplayer.player.VideoView;
- import com.cdnbye.sdk.ChannelIdCallback;
- import com.cdnbye.sdk.P2pEngine;
- import com.cdnbye.sdk.P2pConfig;
- import com.cdnbye.sdk.P2pStatisticsListener;
- import com.cdnbye.sdk.LogLevel;
- import org.json.JSONException;
- import org.json.JSONObject;
- import java.util.List;
- import java.util.logging.Logger;
- import java.util.concurrent.TimeUnit;
- import android.util.DisplayMetrics;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.content.BroadcastReceiver;
- import android.content.pm.ActivityInfo;
- import android.view.Window;
- import android.view.WindowManager;
- import android.view.KeyEvent;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.ViewGroup.LayoutParams;
- //import androidx.appcompat.app.AppCompatActivity;
- public class P2PActivity extends Activity {
- private Activity activity;
- public static final String BROADCAST_LISTENER = "com.webmons.disono.p2pPlayer.Listener";
- private VideoView videoView;
- private StandardVideoController controller;
- private String VOD = "";
- private String LIVE = "";
- private Button replayBtn;
- private Button switchBtn;
- private Button vodBtn;
- private Button liveBtn;
- private String currentUrl = VOD;
- // private String currentUrl = LIVE;
- private double totalHttpDownloaded = 0;
- private double totalP2pDownloaded = 0;
- private double totalP2pUploaded = 0;
- private String _url;
- private LinearLayout lla;
- private LinearLayout llb;
- private LinearLayout llc;
- private TextView peerIdLL;
- private LinearLayout lld;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- super.onCreate(savedInstanceState);
- activity = this;
- Intent intent = getIntent();
- _url = intent.getStringExtra("url");
- VOD = _url;
- LIVE = _url;
- currentUrl = _url;
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
- setContentView(getResources().getIdentifier("p2p_player", "layout", getPackageName()));
- TextView versionV = findViewById(getResources().getIdentifier("version", "id", getPackageName()));
- versionV.setText("Versão: " + P2pEngine.Version);
- lla = (LinearLayout) findViewById(getResources().getIdentifier("lla", "id", getPackageName()));
- llb = (LinearLayout) findViewById(getResources().getIdentifier("llb", "id", getPackageName()));
- llc = (LinearLayout) findViewById(getResources().getIdentifier("llc", "id", getPackageName()));
- peerIdLL = (TextView) findViewById(getResources().getIdentifier("peerId", "id", getPackageName()));
- lld = (LinearLayout) findViewById(getResources().getIdentifier("lld", "id", getPackageName()));
- _broadcastRCV();
- P2pConfig config = new P2pConfig.Builder()
- .logEnabled(false)
- .logLevel(LogLevel.WARN)
- .announce("https://tracker.cdnbye.com/v1")
- .wsSignalerAddr("wss://signal.cdnbye.com")
- .downloadTimeout(10_000, TimeUnit.MILLISECONDS)
- .dcDownloadTimeout(6_000, TimeUnit.MILLISECONDS)
- .localPort(52019)
- .diskCacheLimit(1024*1024*1024)
- .memoryCacheLimit(60*1024*1024)
- .p2pEnabled(true)
- .withTag("unknown")
- .webRTCConfig(null)
- .maxPeerConnections(10)
- .channelId(new ChannelIdCallback() {
- @Override
- public String onChannelId(String urlString) {
- String m3u8 = urlString.split(".m3u8")[0];
- String[] parts = m3u8.split("/");
- return parts[parts.length-1];
- }
- })
- .build();
- P2pEngine engine = P2pEngine.initEngine(getApplicationContext(), "my_key", config);
- engine.addP2pStatisticsListener(new P2pStatisticsListener() {
- @Override
- public void onHttpDownloaded(long value) {
- totalHttpDownloaded += (double)value;
- refreshRatio();
- checkIfConnected();
- }
- @Override
- public void onP2pDownloaded(long value) {
- totalP2pDownloaded += (double)value;
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- TextView offloadV = findViewById(getResources().getIdentifier("offload", "id", getPackageName()));
- String text = String.format("Offload: %.2fMB", totalP2pDownloaded/1024);
- offloadV.setText(text);
- refreshRatio();
- }
- });
- checkIfConnected();
- }
- @Override
- public void onP2pUploaded(long value) {
- totalP2pUploaded += (double)value;
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- TextView uploadV = findViewById(getResources().getIdentifier("upload", "id", getPackageName()));
- String text = String.format("Envio: %.2fMB", totalP2pUploaded/1024);
- uploadV.setText(text);
- }
- });
- checkIfConnected();
- }
- @Override
- public void onPeers(List<String> peers) {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- TextView peersV = findViewById(getResources().getIdentifier("peers", "id", getPackageName()));
- String text = String.format("Conexões: %d", peers.size());
- peersV.setText(text);
- }
- });
- checkIfConnected();
- }
- });
- startPlay(currentUrl);
- replayBtn = findViewById(getResources().getIdentifier("replay", "id", getPackageName()));
- switchBtn = findViewById(getResources().getIdentifier("switcher", "id", getPackageName()));
- //vodBtn = findViewById(getResources().getIdentifier("vod", "id", getPackageName()));
- //liveBtn = findViewById(getResources().getIdentifier("live", "id", getPackageName()));
- replayBtn.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- // 清空数据
- clearData();
- startPlay(currentUrl);
- }
- });
- switchBtn.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- if (currentUrl.equals(VOD)) {
- currentUrl = LIVE;
- } else {
- currentUrl = VOD;
- }
- // 清空数据
- clearData();
- startPlay(currentUrl);
- }
- });
- // vodBtn.setOnClickListener(new View.OnClickListener() {
- // @Override
- // public void onClick(View view) {
- // // 清空数据
- // clearData();
- // currentUrl = VOD;
- // startPlay(currentUrl);
- // }
- // });
- // liveBtn.setOnClickListener(new View.OnClickListener() {
- // @Override
- // public void onClick(View view) {
- // // 清空数据
- // clearData();
- // currentUrl = LIVE;
- // startPlay(currentUrl);
- // }
- // });
- }
- BroadcastReceiver br = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (intent != null) {
- String method = intent.getStringExtra("method");
- if (method != null) {
- switch (method) {
- case "pause":
- if (videoView.isPlaying()) {
- videoView.pause();
- }
- break;
- case "resume":
- if (!videoView.isPlaying()) {
- videoView.resume();
- }
- break;
- case "release":
- videoView.release();
- break;
- case "hideDetails":
- lla.setVisibility(LinearLayout.GONE);
- llb.setVisibility(LinearLayout.GONE);
- llc.setVisibility(LinearLayout.GONE);
- peerIdLL.setVisibility(View.GONE);
- lld.setVisibility(LinearLayout.GONE);
- DisplayMetrics displayMetrics = new DisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
- int height = displayMetrics.heightPixels;
- int width = displayMetrics.widthPixels;
- if(videoView == null){
- videoView = findViewById(getResources().getIdentifier("player", "id", getPackageName()));
- }
- LayoutParams params = videoView.getLayoutParams();
- params.height = height - 30;
- params.width = width - 30;
- videoView.setLayoutParams(params);
- break;
- case "showDetails":
- lla.setVisibility(LinearLayout.VISIBLE);
- llb.setVisibility(LinearLayout.VISIBLE);
- llc.setVisibility(LinearLayout.VISIBLE);
- peerIdLL.setVisibility(View.VISIBLE);
- lld.setVisibility(LinearLayout.VISIBLE);
- break;
- }
- }
- }
- }
- };
- private void _broadcastRCV() {
- IntentFilter filter = new IntentFilter(VideoPlayerP2P.BROADCAST_METHODS);
- activity.registerReceiver(br, filter);
- }
- private void _sendBroadCast(String methodName) {
- Intent intent = new Intent();
- intent.setAction(BROADCAST_LISTENER);
- intent.putExtra("method", methodName);
- activity.sendBroadcast(intent);
- }
- private void _sendBroadCast(String methodName, JSONObject object) {
- Intent intent = new Intent();
- intent.setAction(BROADCAST_LISTENER);
- intent.putExtra("method", methodName);
- intent.putExtra("data", object.toString());
- activity.sendBroadcast(intent);
- }
- private void startPlay(String url) {
- String parsedUrl = P2pEngine.getInstance().parseStreamUrl(url);
- videoView = findViewById(getResources().getIdentifier("player", "id", getPackageName()));
- videoView.setFocusable(true);
- videoView.setFocusableInTouchMode(true);
- videoView.release();
- videoView.setUrl(parsedUrl); //设置视频地址
- // 使用IjkPlayer解码
- //videoView.setPlayerFactory(IjkPlayerFactory.create(this));
- // 使用ExoPlayer解码
- videoView.setPlayerFactory(ExoMediaPlayerFactory.create());
- // 使用MediaPlayer解码
- //videoView.setPlayerFactory(AndroidMediaPlayerFactory.create(this));
- if (controller == null) {
- controller = new StandardVideoController(this);
- }
- videoView.setVideoController(controller); //设置控制器,如需定制可继承BaseVideoController
- videoView.start();
- _sendBroadCast("onPlay");
- }
- private void checkIfConnected() {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- TextView connectedV = findViewById(getResources().getIdentifier("connected", "id", getPackageName()));
- String text = String.format("Conectado: %s", P2pEngine.getInstance().isConnected()?"Sim":"Não");
- connectedV.setText(text);
- TextView peerIdV = findViewById(getResources().getIdentifier("peerId", "id", getPackageName()));
- String text2 = String.format("Seu ID: %s", P2pEngine.getInstance().getPeerId());
- peerIdV.setText(text2);
- }
- });
- }
- private void refreshRatio() {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- double ratio = 0;
- if (totalHttpDownloaded+totalP2pDownloaded != 0) {
- ratio = totalP2pDownloaded/(totalHttpDownloaded+totalP2pDownloaded);
- }
- TextView ratioV = findViewById(getResources().getIdentifier("ratio", "id", getPackageName()));
- String text = String.format("Uso P2P: %.0f%%", ratio*100);
- ratioV.setText(text);
- }
- });
- }
- private void clearData() {
- totalHttpDownloaded = 0;
- totalP2pDownloaded = 0;
- totalP2pUploaded = 0;
- checkIfConnected();
- refreshRatio();
- }
- @Override
- protected void onPause() {
- super.onPause();
- videoView.pause();
- _sendBroadCast("onPause");
- }
- @Override
- protected void onResume() {
- super.onResume();
- videoView.resume();
- _sendBroadCast("onResume");
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- videoView.release();
- _sendBroadCast("onDestroy");
- }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- JSONObject obj = new JSONObject();
- try {
- obj.put("keyCode", keyCode);
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- obj.put("isBackCode", true);
- } else {
- obj.put("isBackCode", false);
- }
- } catch (JSONException e) {
- e.printStackTrace();
- }
- _sendBroadCast("onKeyDown", obj);
- return super.onKeyDown(keyCode, event);
- }
- @Override
- public boolean onKeyUp(int keyCode, KeyEvent event) {
- JSONObject obj = new JSONObject();
- try {
- obj.put("keyCode", keyCode);
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- obj.put("isBackCode", true);
- } else {
- obj.put("isBackCode", false);
- }
- } catch (JSONException e) {
- e.printStackTrace();
- }
- _sendBroadCast("onKeyUp", obj);
- return super.onKeyUp(keyCode, event);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement