function launch() {
				// reset stream record
				setProperties( stream, {
					isLaunching: true,
					error: null,
					warning: false,
					log: []
				});

				const spawnQuality = get( stream, "quality" );
				const context = { stream, player };
				const params = getParameters( context, parameters );

				// spawn the process
				child = spawn( provider, params, { detached: true } );

				child.once( "error", reject );
				child.once( "exit", ( ...args ) => onExit( spawnQuality, ...args ) );

				child.stdout.on( "data", new StreamOutputBuffer( onStdOut ) );
				child.stderr.on( "data", new StreamOutputBuffer( onStdErr ) );

				stream.spawn = child;
			}
@param {Stream} stream
@param {ExecObj} provider
@param {ExecObj} player
@param {Function} onSuccess
@returns {Promise}