2 Star 3 Fork 5

tyousan / VideoDlnaScreen

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

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

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

空文件

简介

视频投屏,支持网络投屏和本地投屏 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/tyousan_admin/VideoDlnaScreen.git
git@gitee.com:tyousan_admin/VideoDlnaScreen.git
tyousan_admin
VideoDlnaScreen
VideoDlnaScreen
master

搜索帮助