ГлавнаяСправка по использованию серверного ActionScriptКласс Stream › Stream.play()

Stream.play()

myStream.play(streamName, [startTime, length, reset, remoteConnection, virtualKey])

Управляет источником данных потока с необязательными параметрами времени начала, продолжительности и флагом сброса для слития в файл каждого проигрывающегося до этого потока. Вызовом play() можно добиться следующего:

  • Создать вереницу потоков между серверами.

  • Централизовать переключение между потоками прямых эфиров и записанными потоками.

  • Объединять потоки в записанный поток.

Объединяя несколько потоков, можно создать список воспроизведения для клиентов. Метод Stream.play() отличается от метода клиентской части NetStream.play(). Вызов на стороне сервера Stream.play() поход на вызов NetStream.publish()клиентской части кода; он управляет источником данных приходящих в поток. При вызове Stream.play() на стороне сервера, сервер становится публикующей стороной. Из-за того что сервер имеет более высокий приоритет по сравнению с клиентом, клиент будет принудительно отключен от публикации потока, если сервером вызван метод play() для этого же потока.

Если какие либо записанные потоки входят в список воспроизведения сервера, возможность проигрывать поток как живой эфир при вхождении потока в список воспроизведения сервера отсутствует.

Примечание: Поток, воспроизводящийся с удалённого сервера посредством объекта NetConnection считается потоком живого эфира.

Что бы удалить объект типа Stream, используйте оператор delete тем самым помечая поток для удаления. Обработчик скриптовых сценариев удаляет объект в порядке сборки мусора.

// Инициализируем объект типа Stream. 
s = stream.get("foo"); 
// Воспроизвести поток. 
s.play("name", p1, ... pN);       
// Остановить воспроизведение. 
s.play(false);                                     
// Пометить объект типа Stream для удаления в процессе сборки мусора на сервере.. 
delete s; 

Доступно с версии сервера

Flash Communication Server 1

Параметры

streamName
Строка, указывающая имя потока. Используется следующий синтаксис:

File format

Syntax

Example

FLV

Указывается строка с именем потока без указания расширения файла.

s.play("fileName")

MP3

Указывается строка с именем потока с приставкой mp3: или id3: в указанном порядке и без расширения файла.

s.play("mp3:fileName")

s.play("id3:fileName")

Файлы MPEG-4 (такие как F4V,
MP4)

Указывается строка с именем потока с приставкой mp4:. Указывается так же расширение файла, если файл на сервере имеет расширение. Приставка указывает серверу на то что формат файла конейнер MPEG-4 Part 12.

s.play("mp4:fileName")

s.play("mp4:fileName.mp4")

s.play("mp4:fileName.f4v")

startTime

Число секунд, указывающее начальное время воспроизведения. Если не указанно никакого значения, значение равно -2. Если startTime равно
-2, сервер пытается воспроизвести поток живого эфира в именем указанным в streamName. Если поток живого эфира не доступен,. сервер пытается воспроизвести записанный поток с именем указанным в streamName. Если не найден и записанный поток, сервер создает поток прямого эфира с именем указанным в streamName и ожидает начала публикации от кого либо в этот поток. Если startTime равно
-1, сервер пытается воспроизвести поток прямого эфира с именем указанным в streamName, если такой поток прямого эфира не найден, сервер ожидает что кто-то начнет публикацию потока. Если startTime больше или равно 0, сервер воспроизводит записанный поток с именем указынным в streamName, начиная с указанного времени. Если не найден записанный поток, метод play() игнорируется. Если указанно отрицательное значение отличное от -1, сервер воспринимает его как -2. Этот параметр необязательный.

length
Число секунд, указывающих на продолжительность участка воспроизведения. Для потоков живого эфира значение равное -1 воспроизводит поток до тех пор, пока он существует. Любое положительное значение проигрывает поток на протяжении соответствующего количества секунд. Для записанных потоков, значение равное -1 воспроизводит весь файл целиком, значение равное 0 возвращает первый кадр видео. Любое положительное число так же проигрывает поток на протяжении соответствующего количества секунд. Значение по умолчанию равно -1. Этот параметр необязательный.

reset
Булева величина, или число, сливающие воспроизводимый поток в файл. Если reset равно false (0), сервер удерживает список воспроизведения, и каждый вызов Stream.play() прибавляется к концу списка воспроизведения таким образом, что пока не закончится предыдущее воспроизведение следующее не начинается. Этим приемом можно воспользоваться для составления динамических списков воспроизведения. Если reset равно true (1),
каждый воспроизводимый поток останавливается, и список воспроизведения сбрасывается в исходное положение. Значение, установленное по умолчанию равно true.

В качестве параметра reset можно так же указывать числа 2 или 3, что может быть полезно при воспроизведении записанных файлов потоков содержащих данные сообщений. Эти значения аналогичны false (0) и true (1)
в указанном порядке: значение 2 удерживает список воспроизведения, а значение
3 сбрасывает список воспроизведение в исходному пустому состоянию. Однако, разница при указании в качестве флага reset 2 или 3 состоит в том, что все сообщения в указанном записанном потоке возвращаются тотчас же, в отличии от их возвращения в промежутках в которых они первоначально были записаны (поведение по умолчанию).

remoteConnection
Объект типа NetConnection используемый для подключения к удалённому серверу. Если этот параметр указан, запрашиваемый поток воспроизводится с удалённого сервера. Этот параметр необязательный.

virtualKey
Строка, указывающая имя ключа. Начиная с Flash Media Server 2, имена потоков не всегда являются уникальными. Можно создавать несколько потоков в тем же самым именем помещая их в физически разные папки. Далее, при помощи разделов VirtualDirectory и VirtualKeys находящихся в файле Vhost.xml нужно направлять клиентов на соответствующий поток. Для получения подробной информации о ключах смотрите Client.virtualKey. Этот параметр необязательный.

Возвращает

Булеву величину: равную true если вызов принят сервером; в противном случаи, false. Если при поиске потока происходит сбой, или возникает ошибка, метод Stream.play() так же может завершится сбоем. Что бы получать информацию о работе метода Stream.play(), нужно определить обработчик Stream.onStatus().

Если параметр streamName равен false, проигрывание потока прекращается. Возвращаемая булева величина равная true указывает на успешную остановку воспроизведения; в противном случаи, возвращаемое значение равно false.

Пример

В следующем примере показано как создать вереницу потоков между серверами:

application.myRemoteConn = new NetConnection(); 
application.myRemoteConn.onStatus = function(info){ 
    trace("Состояние подключения к удалённому серверу " + info.code + "\n"); 
    // Сообщить всем клиентам. 
    for (var i = 0; i < application.clients.length; i++){ 
        application.clients[i].call("onServerStatus", null, info.code, info.description); 
    } 
}; 
// Используем объект NetConnection для подключения к удалённму серверу. 
application.myRemoteConn.connect(rtmp://movie.com/movieApp); 
// Установим серверный поток. 
application.myStream = Stream.get("foo"); 
if (application.myStream){ 
    application.myStream.play("Movie1", 0, -1, true, application.myRemoteConn); 
}

В следующем примере показано как используя Stream.play() централизовать переключение между потоками прямых эфиров и записанными потоками:

// Установим серверный поток.  
application.myStream = Stream.get("foo"); 
if (application.myStream){ 
    // Этот серверный поток воспроизводит "Live1",  
    // "Record1", и "Live2" по 5 секунд каждый. 
    application.myStream.play("Live1", -1, 5); 
    application.myStream.play("Record1", 0, 5, false); 
    application.myStream.play("Live2", -1, 5, false);  
} 

В следующем примере разные потоки объединяются в записанный поток:

// Установим серверный поток. 
application.myStream = Stream.get("foo"); 
if (application.myStream){ 
    // Как и в предыдущем примере, серверный поток воспроизводит
    // "Live1", "Record1", и "Live2"  
    // по 5ть секунд каждый. Но в данном случаи, 
    // все данные будут записаны в файл поток "foo". 
    application.myStream.record(); 
    application.myStream.play("Live1", -1, 5); 
    application.myStream.play("Record1", 0, 5, false); 
    application.myStream.play("Live2", -1, 5, false); 
}

В следующем примере вызов Stream.play() используется для остановки воспроизведения потока foo:

application.myStream.play(false);

В следующем примере из трех MP3 файлов (beethoven.mp3, mozart.mp3,
и chopin.mp3) создается список воспроизведения, который воспроизводится по кругу в режиме прямого эфира в потоке foo:

application.myStream = Stream.get("foo"); 
if(application.myStream) { 
    application.myStream.play("mp3:beethoven", 0); 
    application.myStream.play("mp3:mozart", 0, false); 
    application.myStream.play("mp3:chopin.mp3", 0, false); 
    application.myStream.play("mp4:file1.mp4", -1, 5, false); 
}

В следующем примере воспроизводятся файлы F4V:

application.myStream = Stream.get("foo"); 
if(application.myStream) { 
    application.myStream.play("mp4:beethoven", 0); 
    application.myStream.play("mp4:mozart", 0, false); 
}

В следующем примере, сообщения содержащие данные, в файле записанного потока log.flv при воспроизведении возвращаются через промежутки, в которых они изначально были записаны:

application.myStream = Stream.get("data"); 
if (application.myStream) { 
    application.myStream.play("log", 0, -1); 
}

В следующем примере все сообщения, содержащие данные в файле записанного потока log.flv возвращаются в одночасье, вместо того что бы возвращаться через промежутки в которых они изначально были записаны:

application.myStream = Stream.get("data"); 
if (application.myStream) { 
    application.myStream.play("log", 0, -1, 2); 
}

Серверный поток не может быть подписчиком на самого себя же. Например, указанный ниже код недействительный:

// Код клиентской стороны 
var ns = new NetStream(); 
ns.publish("TestStream"); 
 
// Код на сервере
st = Stream.get("TestStream"); 
st.play("TestStream");

Остальные методы и свойства

Ярлыки: , ,

  1. Пока без комментариев.
  1. Пока нету.