⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 streamcontroller.java

📁 MilGra0.8b for java media server
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
						id = idSequence.remove( 0 );					}		// store id				channelToId.put( packetX.flvChannel , id );				// create new player				if ( name != null )		{					int flvChannel = packetX.flvChannel;			String mode = argumentsX.size( ) > 4 ? argumentsX.getString( 4 ) : "live";				StreamRouter router = new StreamRouter( id , flvChannel , name , mode , this );						routers.put( id , router );			address.put( flvChannel , router );			if ( client.streamListener == null ) router.enable( );			else 			{								Stream stream = new Stream( router );				client.streamListener.onEvent( new StreamEvent( stream , client.client ) );				}				}			}	/**	 * Remote stream create request from a remote stream instance	 * @param streamX stream instance	 */		public void createStream ( Stream streamX )	{		// System.out.println( System.currentTimeMillis() + " " + client.id + " StreamController.createStream " + streamX );		createRequests.add( streamX );		client.callResponse( "createStream" , new WrapperList( ) , 0 );			}		/**	 * Deletes a remote stream	 * @param streamIdX stream id	 * @param streamX stream instance	 */		public void deleteStream ( double streamIdX , Stream streamX )	{		// System.out.println( System.currentTimeMillis() + " " + client.id + " StreamController.deleteStream " + streamIdX + " " + streamX );		if ( streamX.remoteType.equals( "play" ) ) stopRemote( ( int ) streamIdX );		if ( streamX.remoteType.equals( "publish" ) ) unpublishRemote( ( int ) streamIdX );				client.call( "deleteStream" , new Wrapper( streamIdX ) );	}		/**	 * Create stream response from remote connection	 * @param streamIdX stream id	 */		public void onCreateStream ( double streamIdX )	{				// System.out.println( System.currentTimeMillis() + " " + client.id + " StreamController.onCreateStream " + streamIdX );		// getting oldest waiting stream instance		// setting remote id				Stream stream = createRequests.remove( 0 );		stream.remoteId = ( int ) streamIdX;		stream.remoteChannel = flvId--;				// if stream is a remote player, create a related router for incoming stream		// if stream is a remote publisher, create a player for utgoing stream boradcasting				if ( stream.remoteType.equals( "play" ) ) playRemote( ( int ) streamIdX , stream.remoteChannel , stream.remoteName , stream.name );		if ( stream.remoteType.equals( "publish" ) ) publishRemote( ( int ) streamIdX , stream.remoteChannel , stream.remoteName , stream.name , stream.mode );			}		/**	 * Creates a router for incoming stream	 * @param idX	 * @param nameX	 */	public void playRemote ( int idX , int channelX , String remoteNameX , String localNameX )	{				// System.out.println( System.currentTimeMillis() + " " + client.id + " StreamController.playRemote " + idX + " " + remoteNameX + " " + localNameX );		// generate new id and channel				int newId = streamId++;				// create router				StreamRouter router = new StreamRouter( newId , channelX , localNameX , "live" , this );				router.enable( );				// register router				routers.put( newId , router );		address.put( channelX , router );				// send play request		client.call( "play" , new WrapperList( new Wrapper( remoteNameX ) ) , channelX );	}		/**	 * Stops a remote player	 * @param idX stream id	 */		public void stopRemote ( int idX )	{				// System.out.println( System.currentTimeMillis() + " " + client.id + " StreamController.stopRemote " + idX );				// getting router				StreamRouter router = routers.get( idX );				// unregister				routers.remove( idX );		address.remove( router.getFlvChannel( ) );				// close here and there				router.close( );			}		/**	 * Creates a player for outgoing stream	 * @param idX stream id	 * @param nameX local name of stream	 * @param modeX mode of publishing	 */		public void publishRemote ( int idX , int channelX , String remoteNameX , String localNameX , String modeX )	{		// System.out.println( System.currentTimeMillis() + " " + client.id + " StreamController.publishRemote " + idX + " " + remoteNameX + " " + localNameX );		// generate new id and channel				int newId = streamId++;		int videoChannel = getChannel( );		int audioChannel = getChannel( );				// create player				StreamPlayer player = new StreamPlayer( newId , 												channelX , 												videoChannel , 												audioChannel , 												localNameX , 												this );				player.enable( );				// register player				remotes.put( idX , player );		players.put( newId , player );				// send publish request				WrapperList arguments = new WrapperList( );		arguments.add( remoteNameX );		arguments.add( modeX );				client.call( "publish" , arguments , channelX );			}		/**	 * Unpublishes a remote stream	 * @param idX stream id	 */		public void unpublishRemote ( int idX )	{				// System.out.println( System.currentTimeMillis() + " " + client.id + " StreamController.publishRemote " + idX );		// getting player				StreamPlayer player = remotes.get( idX );				// unregister				remotes.remove( idX );		players.remove( player.getId( ) );				// close here and there					player.close( );				}		/**	 * Sets audio sending state	 * @param argumentsX arguments	 * @param packetX rtmp packet	 */		public void onAudioReceiveState ( WrapperList argumentsX , RtmpPacket packetX )	{				// System.out.println( System.currentTimeMillis() + " " + client.id + " StreamController.onAudioReceiveState " );				boolean state = argumentsX.getBoolean( 3 );		for ( StreamPlayer player : players.values( ) ) 			if ( player.getFlvChannel( ) == packetX.flvChannel ) player.enableAudio( state );			}		/**	 * Sets video sending state	 * @param argumentsX arguments	 * @param packetX rtmp packet	 */			public void onVideoReceiveState ( WrapperList argumentsX , RtmpPacket packetX )	{				// System.out.println( System.currentTimeMillis() + " " + client.id + " StreamController.onVideoReceiveState " );				boolean state = argumentsX.getBoolean( 3 );		for ( StreamPlayer player : players.values( ) ) 			if ( player.getFlvChannel( ) == packetX.flvChannel ) player.enableVideo( state );					}	/**	 * Seek request from client	 * @param argumentsX arguments	 * @param packetX rtmp packet	 */		public void onStreamSeekRequest( WrapperList argumentsX , RtmpPacket packetX )	{				// System.out.println( System.currentTimeMillis( ) + " " + client.id + 		//					"StreamController.onStreamSeekRequest" + packetX.toString( ) + " " + argumentsX.getDouble( 3 ) );				for ( StreamPlayer player : players.values( ) ) 			if ( player.getFlvChannel( ) == packetX.flvChannel )				player.reader.setPosition( argumentsX.getDouble( 3 ) );					}		/**	 * Speed request from client	 * @param argumentsX arguments	 * @param packetX rtmp packet	 */		public void onStreamSpeedRequest ( WrapperList argumentsX , RtmpPacket packetX )	{				//System.out.println( System.currentTimeMillis( ) + " " + client.id + 		//					"StreamController.onStreamSpeedRequest" + packetX.toString( ) + " " + argumentsX.getString( 3 )+ " " + argumentsX.getDouble( 4 ) );			for ( StreamPlayer player : players.values( ) ) 				if ( player.getName( ).equals( argumentsX.getString( 3 ) ) )					player.reader.setSpeed( new Double( argumentsX.getDouble( 4 ) ) );			}		/**	 * Pause request from client	 * @param argumentsX arguments	 * @param packetX rtmp packet	 */		public void onStreamPauseRequest ( WrapperList argumentsX , RtmpPacket packetX )	{				//System.out.println( System.currentTimeMillis( ) + " " + client.id + 		//					"StreamController.onStreamSpeedRequest" + packetX.toString( ) + " " + argumentsX.getDouble( 3 ) );			for ( StreamPlayer player : players.values( ) ) 				if ( player.getFlvChannel( ) == packetX.flvChannel )					player.reader.pause( );			}	/**	 * Sets the buffer length for the routers on the specified channel	 * @param idX stream id	 * @param bufferLengthX buffer size	 */		public void setBufferLength ( double streamIdX , int bufferLengthX )	{				// System.out.println( System.currentTimeMillis( ) + " " + client.id + " StreamController.setBufferLength " + streamIdX + " " + bufferLengthX );				//if ( routers.containsKey( streamIdX ) )		//	routers.get( streamIdX ).setBufferLength( bufferLengthX );			}		/**	 * Steps one in packet multiplexing	 */		public void step ( )	{				// System.out.println( System.currentTimeMillis( ) + " " + client.id + " StreamController.step ogList: " + outgoingList.size( ) );				// get incoming flv packets				socket.giveFlvPackets( incomingList );				// sort them								for ( RtmpPacket packet : incomingList )			if ( address.containsKey( packet.flvChannel ) ) 				 address.get( packet.flvChannel ).take( packet );				// get sorted packets		for ( StreamPlayer player : players.values( ) ) player.givePackets( outgoingList );				// give available packets		socket.takePackets( outgoingList );		incomingList.clear( );			}		/**	 * Sets dropping to a higher level	 */		public void addDropping ( )	{				// System.out.println( System.currentTimeMillis( ) + " " + client.id + " StreamController.addDropping" );		if ( !dropDisposables ) dropDisposables = true; else		if ( !dropInterframes ) dropInterframes = true; else		if ( !dropKeyframes ) dropKeyframes = true; else		if ( !dropAudio ) dropAudio = true;			}		/**	 * Sets dropping to a lower level	 */		public void removeDropping ( )	{		//System.out.println( System.currentTimeMillis( ) + " " + client.id + " StreamController.removeDropping" );		if ( dropAudio ) dropAudio = false; else		if ( dropKeyframes ) dropKeyframes = false; else		if ( dropInterframes ) dropInterframes = false; else		if ( dropDisposables ) dropDisposables = false;			}		/**	 * Returns played stream list	 * @return hashmap containing players	 */		public HashMap < Integer , Stream > getPlayers ( ) 	{				// System.out.println( System.currentTimeMillis() + " " + client.id + " StreamController.getPlayedStreams" );				HashMap < Integer , Stream > result = new HashMap < Integer , Stream > ( );		//for ( Stream player : players.values( ) ) result.put( player.id , player );				return result;			}		/**	 * Returns published stream list	 * @return hashmap containing routers	 */		public HashMap < Integer , Stream > getRouters ( ) 	{				//System.out.println( System.currentTimeMillis() + " " + client.id + " StreamController.getPublishedStreams " );		HashMap < Integer , Stream > result = new HashMap < Integer , Stream > ( );		//for ( Stream router : routers.values( ) ) result.put( router.id , router );				return result;			}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -