Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Описание

Поддерживаемые платформы

 

Adobe Flash

Windows

+

Mac OS

+

Linux

+

Схема работы

 Image Added



  1. Браузер устанавливает соединение по Websocket и отправляет команду publish.
  2. Браузер отправляет WebRTC поток на сервер
  3. Flash Player соединяется с сервером по протоколу RTMP и отправляет команду play.
  4. Flash Player получает RTMP поток с сервера.

Краткое руководство по тестированию

Трансляция потока с веб-камеры на сервер и воспроизведение при помощи Flash Player

1. Для теста используем:

  • демо-сервер demo.flashphoner.com:
  • веб-приложение Two Way Streaming в браузере Chrome для публикации потока
  • веб-приложение Flash Streaming в браузере Internet Explorer для воспроизведения потока

2. Откройте веб-приложение Two Way Streaming. Нажмите Connect, затем Publish. Скопируйте идентификатор потока:

Image Added 


 

3. Установите Flash Player. Откройте страницу веб-приложения Flash Streaming и разрешите запуск Flash в браузере:

 Image Added


 

4. Нажмите кнопку Login. При появлении надписи "Connected" укажите в поле Play идентификатор транслируемого потока:

Image Added 


 

5. Нажмите кнопку Start в поле Play. Начнется воспроизведение потока:

 Image Added

Последовательность выполнения операций (Call Flow)

Ниже описана последовательность вызовов при использовании примера Flash Streaming для воспроизведения потока 

streaming.mxml

Image Added


1. Установка соединения с сервером.

connect(); code

Code Block
languageactionscript3
themeRDark
	private function connect():void{
		var url:String = StringUtil.trim(connectUrl.text);
		Logger.info("connect " + url);
		nc = new NetConnection();
		//if (url.indexOf("rtmp") == 0){
		//	nc.objectEncoding = ObjectEncoding.AMF0;
		//}
		nc.client = this;
		nc.addEventListener(NetStatusEvent.NET_STATUS, handleConnectionStatus);				
		var obj:Object = new Object();
		obj.login = generateRandomString(20);
		obj.appKey  = "flashStreamingApp";
		nc.connect(url,obj);
	}


 2. Получение от сервера события, подтверждающего успешное соединение.

NetConnection.Connect.Success code

Code Block
languageactionscript3
themeRDark
    private function handleConnectionStatus(event:NetStatusEvent):void{
		Logger.info("handleConnectionStatus: "+event.info.code);				
		if (event.info.code=="NetConnection.Connect.Success"){
			Logger.info("near id: "+nc.nearID);				
			Logger.info("far id: "+nc.farID);
			Logger.info("Connection opened");
			disconnectBtn.visible = true;
			connectBtn.visible = false;
			playBtn.enabled = true;
			publishBtn.enabled = true;
			setConnectionStatus("CONNECTED");					
		} else if (event.info.code=="NetConnection.Connect.Closed" || event.info.code=="NetConnection.Connect.Failed"){					
            ...
		}
	}


3. Воспроизведение потока.

stream.play(); code

Code Block
languageactionscript3
themeRDark
    private function addListenerAndPlay():void{
        ...
		subscribeStreamObject = createStreamObject();
		subscribeStream.play(playStreamName.text);
		videoFarEnd.attachNetStream(subscribeStream);
		videoFarEnd.width = 320;
		videoFarEnd.height = 240;
		videoFarEnd.visible = true;
	}


4. Получение от сервера события, подтверждающего успешное воспроизведение потока 

NetStream.Play.Start code 

Code Block
languageactionscript3
themeRDark
    private function handleSubscribeStreamStatus(event:NetStatusEvent):void{
		Logger.info("handleSubscribeStreamStatus: "+event.info.code);
		switch (event.info.code) {
			case "NetStream.Play.PublishNotify":
			case "NetStream.Play.Start": 
				setPlayStatus("PLAYING");
				playBtn.visible = false;
				stopBtn.enabled = true;
				stopBtn.visible = true;
				break;
            ...
		}
	}


5. Прием аудио-видео потока по RTMP

6. Остановка воспроизведения потока. 

stream.close(); code

Code Block
languageactionscript3
themeRDark
    private function stop():void{
		if (subscribeStream != null) {
			stopBtn.enabled = false;
			subscribeStream.close();
			subscribeStream = null;
		}
		subscribeStreamObject = null;
		videoFarEnd.visible = false;
	}


 7. Получение от сервера события, подтверждающего остановку воспроизведения потока.

NetStream.Play.Stop code

Code Block
languageactionscript3
themeRDark
    private function handleSubscribeStreamStatus(event:NetStatusEvent):void{
		Logger.info("handleSubscribeStreamStatus: "+event.info.code);
		switch (event.info.code) {
            ...
			case "NetStream.Play.UnpublishNotify":
			case "NetStream.Play.Stop":
				setPlayStatus("STOPPED");
				playBtn.enabled = true;
				playBtn.visible = true;
				stopBtn.visible = false;
				break;
            ...
		}
	}