Git Product home page Git Product logo

videodlnascreen's Introduction

视频投屏,支持网络投屏和本地投屏

android Dlna开发

GitHub主页

集成方式

添加依赖

Step 1. Add the JitPack repository to your build file

Add it in your root build.gradle at the end of repositories:

allprojects {
	repositories {
		...
		maven { url 'https://www.jitpack.io' }
      		maven {url 'http://4thline.org/m2'}
	}
 
}

Step 2. Add the dependency

android  {
	//必须添加,不加会报错
 packagingOptions {
        exclude 'META-INF/beans.xml'
    }

  }
dependencies {

       compileOnly 'javax.enterprise:cdi-api:2.0'
       implementation 'com.github.yanbo469:VideoDlnaScreen:v1.0'
}

Step 3. Add the Initialization

public class Application {

    @Override
    public void onCreate() {
        super.onCreate();
	    //初始化
      VApplication.init(this);
    }
}

Step 4.使用方法

//使用前先注册服务
ClingManager.getInstance().startClingService();

 //得到当前搜索到的所有设备
 private List<ClingDevice> clingDevices;

 /**
  * 基于EventBus,回调会回来的值来显示当前找到的设备
  */
  @Subscribe(threadMode = ThreadMode.MAIN)
  public void onEventBus(DeviceEvent event) {
     clingDevices = DeviceManager.getInstance().getClingDeviceList();
   }
   
  @Override
  public void onStart() {
     super.onStart();
     EventBus.getDefault().register(this);
   }

  @Override
  public void onStop() {
     super.onStop();
     EventBus.getDefault().unregister(this);
  }
  
     
  //选择你要投屏的设备;
  DeviceManager.getInstance().setCurrClingDevice(ClingDevice);
  
  //设置网络投屏的信息
  RemoteItem itemurl1 = new RemoteItem("一路之下", "425703", "张杰",107362668, "00:04:33", "1280x720", url1);
  
  //添加网络投屏的信息
  ClingManager.getInstance().setRemoteItem(itemurl1);
  
  //设置本地投屏的信息
  private List<DIDLObject> objectList;  
  
  final DIDLObject object = objectList.get(position);
  
	if (object instanceof Container) {
		//得到本地文件夹
		Container container = (Container) object;
		//点进文件夹刷新数据List<DIDLObject> objectList
		ClingManager.getInstance().searchLocalContent(containerId);
	} else if (object instanceof Item) {
		//得到本地文件
		Item item = (Item) object;
		// 设置本地投屏的信息
		ClingManager.getInstance().setLocalItem(item);     
	}


   public Item localItem;
   public RemoteItem remoteItem;
   localItem = ClingManager.getInstance().getLocalItem();
   remoteItem = ClingManager.getInstance().getRemoteItem();	
  /**
   * 播放开关
   */
  private void play() {
  
      if (ControlManager.getInstance().getState() == ControlManager.CastState.STOPED) {
		if (localItem != null) {
		
		  	 newPlayCastLocalContent();
		 } else {
		 
			 newPlayCastRemoteContent();
		 }
       } else if (ControlManager.getInstance().getState() == ControlManager.CastState.PAUSED) {
       
        	 playCast();
       } else if (ControlManager.getInstance().getState() == ControlManager.CastState.PLAYING) {
       
           	 pauseCast();
       } else {
       
           	 Toast.makeText(getBaseContext(), "正在连接设备,稍后操作", Toast.LENGTH_SHORT).show();
        }
    }

  /**
   * 本地投屏
   */
  private void newPlayCastLocalContent() {
  
	ControlManager.getInstance().setState(ControlManager.CastState.TRANSITIONING);
	
	ControlManager.getInstance().newPlayCast(localItem, new ControlCallback() {
	
	@Override
	public void onSuccess() {
	
	  ControlManager.getInstance().setState(ControlManager.CastState.PLAYING);
	  
	  ControlManager.getInstance().initScreenCastCallback();
	  
	     runOnUiThread(new Runnable() {
	     	  @Override
	          public void run() {
		  
		      playView.setImageResource(R.mipmap.ic_launcher_round);
		     }
	      }
	      
	     @Override
	     public void onError(int code, String msg) {
	     
		  ControlManager.getInstance().setState(ControlManager.CastState.STOPED);
		  
		  showToast(String.format("New play cast local content failed %s", msg));
	});
   }


  /**
   * 网络投屏
   */
  private void newPlayCastRemoteContent() {
  
	 ControlManager.getInstance().setState(ControlManager.CastState.TRANSITIONING);
	 
	 ControlManager.getInstance().newPlayCast(remoteItem, new ControlCallback() {

		@Override
		public void onSuccess() {
		
			  ControlManager.getInstance().setState(ControlManager.CastState.PLAYING);
			  
			  ControlManager.getInstance().initScreenCastCallback();
			  
			runOnUiThread(new Runnable() {
			
			    @Override
			    public void run() {
			    
				playView.setImageResource(R.mipmap.ic_launcher_round);
			    }
			});
            	}

		@Override
		public void onError(int code, String msg) {
		
			ControlManager.getInstance().setState(ControlManager.CastState.STOPED);
			
			showToast(String.format("New play cast remote content failed %s", msg));
		    }
		});
  }
    
  /**
   * 播放
   */
  private void playCast() {
  
        ControlManager.getInstance().playCast(new ControlCallback() {
	
            @Override
            public void onSuccess() {
	    
                ControlManager.getInstance().setState(ControlManager.CastState.PLAYING);

			runOnUiThread(new Runnable() {
			    @Override
			    public void run() {
				playView.setImageResource(R.mipmap.ic_launcher_round);
			    }
			});
            }

            @Override
            public void onError(int code, String msg) {
	    
                showToast(String.format("Play cast failed %s", msg));
            }
        });
    }
    

  /**
   * 暂停
   */
  private void pauseCast() {
  
        ControlManager.getInstance().pauseCast(new ControlCallback() {
	
            @Override
            public void onSuccess() {
	    
                ControlManager.getInstance().setState(ControlManager.CastState.PAUSED);
		
                runOnUiThread(new Runnable() {
		
                    @Override
                    public void run() {
		    
                        playView.setImageResource(R.mipmap.ic_launcher_round);
                    }
                });
            }

            @Override
            public void onError(int code, String msg) {
	    
                showToast(String.format("Pause cast failed %s", msg));
            }
        });
    }
    
/**
  * 退出投屏
  */
private void stopCast() {

        ControlManager.getInstance().stopCast(new ControlCallback() {
	
            @Override
            public void onSuccess() {
	    
                ControlManager.getInstance().setState(ControlManager.CastState.STOPED);
		
                runOnUiThread(new Runnable() {
		
                    @Override
                    public void run() {
		    
                        playView.setImageResource(R.mipmap.ic_launcher_round);
                        finish();
                    }
                });
            }

            @Override
            public void onError(int code, String msg) {
	    
                showToast(String.format("Stop cast failed %s", msg));
            }
        });
    }
    
  /**
   * 改变投屏进度
   */
  private void seekCast(int progress) {
  
         String target = VMDate.toTimeString(progress);
	 
         ControlManager.getInstance().seekCast(target, new ControlCallback() {
	 
            @Override
            public void onSuccess() {

            }

            @Override
            public void onError(int code, String msg) {
	    
                showToast(String.format("Seek cast failed %s", msg));
            }
        });
    }
   
  /**
   * 设置音量大小
   */
  private void setVolume(int volume) {
  
         currVolume = volume;
         ControlManager.getInstance().setVolumeCast(volume, new ControlCallback() {
	 
            @Override
            public void onSuccess() {

            }

            @Override
            public void onError(int code, String msg) {
	    
                showToast(String.format("Set cast volume failed %s", msg));
            }
        });
    }
}

参考感谢

Cling DLNA库

DLNA 百科介绍

简书-细卷子

hubing8658/UPnP-DLNA-Demo kevinshine/BeyondUPnP

videodlnascreen's People

Contributors

yanbo469 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.