Versions Compared

Key

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

...

Flashphoner.init() код

Code Block
languagejs
themeRDark
Flashphoner.init({flashMediaProviderSwfLocation: '../../../../media-provider.swf'});

...

Действие выводится в специальный элемент на странице при помощи функции логирования log()

Code Block
languagejs
themeRDark
var url = field('url');
        log("Create new session with url " + url);
        $('#url').prop('disabled', true);
        session = Flashphoner.createSession({urlServer: url}).on(SESSION_STATUS.ESTABLISHED, function(session){
            //session connected, start streaming
            startStreaming(session);
        }).on(SESSION_STATUS.DISCONNECTED, function(){
setStatus(            setStatus(SESSION_STATUS.DISCONNECTED);
            $('#url').prop('disabled', false);
            onStopped();
        }).on(SESSION_STATUS.FAILED, function(){
            setStatus(SESSION_STATUS.FAILED);
            $('#url').prop('disabled', false);
onStopped            onStopped();
        }).on(SESSION_STATUS.DEBUG, function(event){
            log("Debug session " + event.status);
            if (event.file) {
                var link = window.location.protocol + "//" + window.location.host + "/" + event.file;
$("#link"                $("#link").attr("href", link);
                $("#downloadDiv").show();
            }
        });


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

ConnectionStatusEvent ESTABLISHED код

Code Block
languagejs
themeRDark
session = Flashphoner.createSession({urlServer: url}).on(SESSION_STATUS.ESTABLISHED, function(session){
            //session connected, start streaming
startStreaming            startStreaming(session);
        }).on(SESSION_STATUS.DISCONNECTED, function(){
            setStatus(SESSION_STATUS.DISCONNECTED);
            $('#url').prop('disabled', false);
            onStopped();
        }).on(SESSION_STATUS.FAILED, function(){
setStatus(            setStatus(SESSION_STATUS.FAILED);
            $('#url').prop('disabled', false);
            onStopped();
        }).on(SESSION_STATUS.DEBUG, function(event){
            log("Debug session " + event.status);
            if (event.file) {
var link                var link = window.location.protocol + "//" + window.location.host + "/" + event.file;
                $("#link").attr("href", link);
                $("#downloadDiv").show();
}
});            }
        });


4. Запуск отладочного вывода сессии и публикация видеопотока.

...

При создании передается имя видеопотока streamName, а также localVideo - div-элемент, в котором будет отображаться видео с камеры.

Code Block
languagejs
themeRDark
  session.startDebug();
    session.createStream({
        name: streamName,
        display: localVideo,
        cacheLocalResources: true,
        receiveVideo: false,
        receiveAudio: false
    }).on(STREAM_STATUS.PUBLISHING, function(publishStream){
        log("Stream " + streamName + " " + STREAM_STATUS.PUBLISHING);
        setStatus(STREAM_STATUS.PUBLISHING);
        //play preview
        session.createStream({
            name: streamName,
            display: remoteVideo
        }).on(STREAM_STATUS.PLAYING, function(previewStream){
            //enable stop button
            log("Stream " + streamName + " " + STREAM_STATUS.PLAYING);
            onStarted(publishStream, previewStream);
        }).on(STREAM_STATUS.STOPPED, function(){
            log("Stream " + streamName + " " + STREAM_STATUS.STOPPED);
            publishStream.stop();
        }).on(STREAM_STATUS.FAILED, function(stream){
log("Stream " +           log("Stream " + streamName + " " + STREAM_STATUS.FAILED);
            //preview failed, stop publishStream
            if (publishStream.status() == STREAM_STATUS.PUBLISHING) {
                log("Stream " + streamName + " " + STREAM_STATUS.FAILED);
setStatus(STREAM_STATUS.FAILED, stream);
                setStatus(STREAM_STATUS.FAILED, stream);
                publishStream.stop();
            }
        }).play();
    }).on(STREAM_STATUS.UNPUBLISHED, function(){
        setStatus(STREAM_STATUS.UNPUBLISHED);
        log("Stream " + streamName + " " + STREAM_STATUS.UNPUBLISHED);
        //enable start button
        onStopped();
    }).on(STREAM_STATUS.FAILED, function(stream){
        log("Stream " + streamName + " " + STREAM_STATUS.FAILED);
        setStatus(STREAM_STATUS.FAILED, stream);
        //enable start button
        onStopped();
    }).publish();


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

...

При получении данного события создается превью-видеопоток при помощи createStream() и вызывается play() для его воспроизведения.

Code Block
languagejs
themeRDark
 session.createStream({
        name: streamName,
display: localVideo,
        display: localVideo,
        cacheLocalResources: true,
        receiveVideo: false,
        receiveAudio: false
    }).on(STREAM_STATUS.PUBLISHING, function(publishStream){
        log("Stream " + streamName + " " + STREAM_STATUS.PUBLISHING);
        setStatus(STREAM_STATUS.PUBLISHING);
        //play preview
        session.createStream({
({
            name: streamName,
            display: remoteVideo
        }).on(STREAM_STATUS.PLAYING, function(previewStream){
            //enable stop button
            log("Stream " + streamName + " " + STREAM_STATUS.PLAYING);
            onStarted(publishStream, previewStream);
        }).on(STREAM_STATUS.STOPPED, function(){
            log("Stream " + streamName + " " + STREAM_STATUS.STOPPED);
            publishStream.stop();
        }).on(STREAM_STATUS.FAILED, function(stream){
            log("Stream " + streamName + " " + STREAM_STATUS.FAILED);
            //preview failed, stop publishStream

            if (publishStream.status() == STREAM_STATUS.PUBLISHING) {
                log("Stream " + streamName + " " + STREAM_STATUS.FAILED);
                setStatus(STREAM_STATUS.FAILED, stream);
                publishStream.stop();
            }
        }).play();
    }).on(STREAM_STATUS.UNPUBLISHED, function(){
        setStatus(STREAM_STATUS.UNPUBLISHED);
        log("Stream " + streamName + " " + STREAM_STATUS.UNPUBLISHED);
        //enable start button
        onStopped();
    }).on(STREAM_STATUS.FAILED, function(stream){
        log("Stream " + streamName + " " + STREAM_STATUS.FAILED);
        setStatus(STREAM_STATUS.FAILED, stream);
, stream);
        //enable start button
        onStopped();
    }).publish();


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

previewStream.stop() код

Code Block
languagejs
themeRDark
function onStarted(publishStream, previewStream) {
    $("#publishBtn").text("Stop").off('click').click(function(){
        $(this).prop('disabled', true);
        previewStream.stop();
    }).prop('disabled', false);
    $("#downloadDiv").hide();
}

...

StreamStatusEvent STOPPED код

Code Block
languagejs
themeRDark
   session.createStream({

            name: streamName,
            display: remoteVideo
        }).on(STREAM_STATUS.PLAYING, function(previewStream){
            //enable stop button
            log("Stream " + streamName + " " + STREAM_STATUS.PLAYING);
            onStarted(publishStream, previewStream);
 previewStream);
        }).on(STREAM_STATUS.STOPPED, function(){
            log("Stream " + streamName + " " + STREAM_STATUS.STOPPED);
            publishStream.stop();
        }).on(STREAM_STATUS.FAILED, function(stream){
            log("Stream " + streamName + " " + STREAM_STATUS.FAILED);
 + STREAM_STATUS.FAILED);
            //preview failed, stop publishStream
            if (publishStream.status() == STREAM_STATUS.PUBLISHING) {
                log("Stream " + streamName + " " + STREAM_STATUS.FAILED);
                setStatus(STREAM_STATUS.FAILED, stream);
                publishStream.stop();
            }
        }).play();


8. Остановка публикации видеопотока после остановки воспроизведения превью-потока

publishStream.stop() код

Code Block
languagejs
themeRDark
 session.createStream({
            name: streamName,
            display: remoteVideo
        }).on(STREAM_STATUS.PLAYING, function(previewStream){
{
            //enable stop button
            log("Stream " + streamName + " " + STREAM_STATUS.PLAYING);
            onStarted(publishStream, previewStream);
        }).on(STREAM_STATUS.STOPPED, function(){
            log("Stream " + streamName + " " + STREAM_STATUS.STOPPED);
            publishStream.stop();
();
        }).on(STREAM_STATUS.FAILED, function(stream){
            log("Stream " + streamName + " " + STREAM_STATUS.FAILED);
            //preview failed, stop publishStream
            if (publishStream.status() == STREAM_STATUS.PUBLISHING) {
) == STREAM_STATUS.PUBLISHING) {
                log("Stream " + streamName + " " + STREAM_STATUS.FAILED);
                setStatus(STREAM_STATUS.FAILED, stream);
                publishStream.stop();
            }
        }).play();


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

StreamStatusEvent UNPUBLISHED код

Code Block
languagejs
themeRDark
 session.createStream({
        name: streamName,
        display: localVideo,
        cacheLocalResources: true,
        receiveVideo: false,
        receiveAudio: false
    }).on(STREAM_STATUS.PUBLISHING, function(publishStream){
        log("Stream " + streamName + " " + STREAM_STATUS.PUBLISHING);
        setStatus(STREAM_STATUS.PUBLISHING);

        //play preview
        session.createStream({
            name: streamName,
            display: remoteVideo
        }).on(STREAM_STATUS.PLAYING, function(previewStream){
//enable stop button
            //enable stop button
            log("Stream " + streamName + " " + STREAM_STATUS.PLAYING);
            onStarted(publishStream, previewStream);
        }).on(STREAM_STATUS.STOPPED, function(){
            log("Stream " + streamName + " " + STREAM_STATUS.STOPPED);
            publishStream.stop();
        }).on(STREAM_STATUS.FAILED, function(stream){

            log("Stream " + streamName + " " + STREAM_STATUS.FAILED);
            //preview failed, stop publishStream
            if (publishStream.status() == STREAM_STATUS.PUBLISHING) {
                log("Stream " + streamName + " " + STREAM_STATUS.FAILED);
 + " " + STREAM_STATUS.FAILED);
                setStatus(STREAM_STATUS.FAILED, stream);
                publishStream.stop();
            }
        }).play();
    }).on(STREAM_STATUS.UNPUBLISHED, function(){
        setStatus(STREAM_STATUS.UNPUBLISHED);
);
        log("Stream " + streamName + " " + STREAM_STATUS.UNPUBLISHED);
        //enable start button
        onStopped();
    }).on(STREAM_STATUS.FAILED, function(stream){
        log("Stream " + streamName + " " + STREAM_STATUS.FAILED);
        setStatus(STREAM_STATUS.FAILED, stream);
        //enable start button
        onStopped();
    }).publish();


10. Остановка отладочного вывода сессии после остановки публикации

session.stopDebug() код

Code Block
languagejs
themeRDark
function onStopped() {
    $("#publishBtn").text("Start").off('click').click(function(){
        $(this).prop('disabled', true);
        start();
    }).prop('disabled', false);
    if (session)
        session.stopDebug();
}


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

...

При получении данного события формируется ссылка на файл лога сессии

Code Block
languagejs
themeRDark
session = Flashphoner.createSession({urlServer: url}).on(SESSION_STATUS.ESTABLISHED, function(session){
            //session connected, start streaming
            startStreaming(session);

        }).on(SESSION_STATUS.DISCONNECTED, function(){
            setStatus(SESSION_STATUS.DISCONNECTED);
            $('#url').prop('disabled', false);
            onStopped();
        }).on(SESSION_STATUS.FAILED, function(){
            setStatus(SESSION_STATUS.FAILED);

            $('#url').prop('disabled', false);
            onStopped();
        }).on(SESSION_STATUS.DEBUG, function(event){
            log("Debug session " + event.status);
if (event.file) {
            if (event.file) {
                var link = window.location.protocol + "//" + window.location.host + "/" + event.file;
                $("#link").attr("href", link);
                $("#downloadDiv").show();
            }
        });


12. Вывод отладочной информации на страницу

код

Code Block
languagejs
themeRDark
function log(string) {
    document.getElementById("debug").innerHTML += string + '</br>';
}

...