Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   [red5] Кто-нибудь знает как сменить имя файла во время записи потока ? (http://www.flasher.ru/forum/showthread.php?t=204243)

djyamato 25.10.2013 03:07

[red5] Кто-нибудь знает как сменить имя файла во время записи потока ?
 
Здравствуйте
Нашел такое решение http://sziebert.net/posts/server-sid...ing-with-red5/
Но нерабочее (не получилось у меня)
Вместо запуска публикации на стороне AS (NetStream.publish("streamName","record")) с параметром "record" мне нужно файлы чтобы сохранялись не по имени потока, а с такими именами, которые я назначу в серверном скрипте.

Я публикую поток так
Код AS3:

outStream.publish(publishStreamName,"live");

Карлуша рекомендует вот так запускать запись потока
Код AS3:

nc.call("streamManager.recordShow",null);


У него же код функции для записи потока такой
Код AS3:

/**
    * Start recording the publishing stream for the specified
    * IConnection.
    *
    * @param conn
    */

    public void recordShow(IConnection conn) {
        log.debug("Recording show for: " + conn.getScope().getContextPath());
        String streamName = String.valueOf(System.currentTimeMillis());
        // Get a reference to the current broadcast stream.
        ClientBroadcastStream stream = (ClientBroadcastStream) app.getBroadcastStream(conn.getScope(),"имя потока");
        try {
            // Save the stream to disk.
            stream.saveAs(streamName, false);
        } catch (Exception e) {
            log.error("Error while saving stream: " + streamName, e);
        }
    }

а у меня stream равен null каста его к (ClientBroadcastStream)

ps кстати, нужно попробовать каст убрать

-------------------------------------------------------
Работает верно, нужно было nc.call("streamManager.recordShow",null); после NetStream.Publish.Start

$mival 10.11.2013 18:59

Вложений: 1
не надо делать никаких nc.call
в Application переопределяем следущее
Код AS3:

        @Override
        public void streamBroadcastStart(IBroadcastStream stream)
        {
                String file = stream.getPublishedName();
                try {
                        stream.saveAs(file, false);
                } catch (Exception e) {
                        logger.error("Error while saving stream: {}", stream.getPublishedName());
                } finally {
                        super.streamPublishStart(stream);
                }
        }

А вот для именования юзаем streamFilenameGenerator (читай про DefaultStreamFilenameGenerator)
для этого надо добавить его в red5-web.xml
Код:

<bean id="streamFilenameGenerator" class="StreamNameGenerator" />
вот моя реализация для сервера версии 1.0.0 (приложено), в этой вресии ред5 немного глючно генерятся папки если есть subscopes, поэтому StreamNameGenerator нужно было юзать обязательно иначе писало не туда и невозможно было прочитать потом записанный файл. А более поздние версии тупо не дописывают запись, файлы получаются битыми.
Сейчас юзая этот класс если ты конектишься например в your_app/scope123 то запись будет вестись в webapps/your_app/streams/scope123/mystream.flv
В 52ой строке я внешним классом приписываю таймштамп в конце имени, там надо подредактировать если нужно.

djyamato 10.11.2013 21:38

Спасибо за совет, не заметил в доках этого по невнимательности.
P.S. Кстати, ты не сталкивался с проблемой для версий 1.0.. когда запись получалась битой. То есть, или звук не соответствует картинке или каринка после нескольких секунд записи вообще залипает.А бывало и такое - сервак просто несколько первых секунд записывал :) Причем, эти все симптомы я лечу одним способом - даунгрэйтом до 0.8. Может есть какие-либо более корректные способы ?

$mival 11.11.2013 10:44

к счастью мне пока нужно писать только голос, из версий 1.Х это единственная которая дописывает файл до конца.


Часовой пояс GMT +4, время: 16:50.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.