138 Matching Annotations
  1. May 2026
    1. connect

      ~~в getUserData нет status: ESTABLISHED, этот статус возникает только на клиенте. поэтому ws.data: {status:ESTABLISHED} выглядит лишним.~~

      статус есть в getUserData, хотя SDK поднимает статус ESTABLISHED наверх, не проверяя это значение, по факту получения и обработки getUserData

    2. pauseStream

      Этот функционал вообще работает? Не помню такого метода в WebSDK, автоматической документации на него тоже нет, нужно проверифицировать

    3. Request Body schema

      WebRTC и Flash здесь нет, только SIP

      состав параметров не соответствует хуку. RegistrationStatusEvent выглядит так (пример из логов сервера) OBJECT: { "nodeId" : "f02vkq9PbK9A8MrBnKatCK9clLbHbPyR@95.191.130.39", "appKey" : "defaultApp", "sessionId" : "/5.129.23.83:53866/95.191.130.39:8443-caab56ae-481a-484e-8ca6-ff8a47456080", "status" : "REGISTERED" }

    4. Request Body schema

      ConnectionStatusEvent содержит разный состав полей для различных кейсов: WebRTC, Flash, SIP

      и кейса Status там точно нет

      рекомендуется протестировать вручную и посмотреть, как это работает

    5. /apps/DefaultApp/RegistrationStatusEvent

      на диаграмме не хватает connect от клиента к серверу

      иначе непонятно, откуда взялось SIP REGISTER

      не TCP connect, просто connect, т.к. SIP REGISTER мы отправляем не только по факту websocket connect, там еще идет сигналинговое сообщение connection с параметрами регистрации

    6. /apps/DefaultApp/XcapStatusEvent

      этот функционал вообще работает?

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

      если это легаси, лучше будет его из документации убрать вообще

    7. /apps/DefaultApp/StreamKeepAliveEvent

      это не информационное сообщение, это управление потоком (остановка потока на стороне сервера) документация здесь: https://docs.flashphoner.com/static/WCS53/Streaming_video_functions/Captured_stream_management/Stopping_the_video_stream_on_the_server_side/

      нужно скорректировать описание и диаграмму

      лучше показать пример остановки стрима: 1. верхняя стрелка оставляем только publishing stream 2. бэкенд отвечает 403 Forbidden 3. от клиента к серверу перечеркнутая стрелка publishing stream 4. от сервера к клиенту стрелка Notify stream status (FAILED)

      если приходит 200 OK, сервер ничего с потоком не делает, но если приходит что-то иное (в клиентской доке мы рекомендуем 403, т.к. это ближе всего по смыслу), сервер останавливает медиасессию, клиент получает нотификацию StreamStatusEvent с FAILED

    8. /apps/DefaultApp/StreamEvent

      диаграмма:

      1. Пунктирная стрелка от клиента к серверу Publishing stream
      2. Пунктирная стрелка от сервера ко второму клиенту Playing stream
      3. Стрелка от паблишера к серверу Mute stream audio
      4. Стрелка от сервера к паблишеру audioMuted
      5. POST /apps/DefaultApp/StreamEvent к бэкенду и т.д.

      Вообще, зеленый квадратик желательно расшифровывать во всех случаях

      Стрелка audioMuted должна быть от сервера к зрителю, а не к паблишеру

    9. /apps/DefaultApp/DataStatusEvent

      диаграмма:

      Речь идет об отправке данных с одного клиента многим клиентам https://flashphoner.com/docs/api/WCS5/rest_api/latest/v3/#tag/Data/operation/sendData

      1. От клиента к серверу POST /data/send
      2. Рисуем второго клиента, к нему OnDataEvent
      3. Дальше POST /apps/DefaultApp/DataStatusEvent на бэкенд и т.д.
    10. /apps/DefaultApp/unPublishStream

      На диаграмме не хватает пунктирной стрелки от клиента к серверу Publishing stream

      также Unpublish stream лучше заменить на Stop publishing

    11. /apps/DefaultApp/submitBugReport

      Метод WebSDK Session.submitBugReport() принимает на вход JSON объект. Не факт, что упаковка вообще поддерживается. Нужно проверить, как работает функционал, и скорректировать описание.

    12. /apps/DefaultApp/stopStream

      Здесь на диаграмме не хватает пунктирной стрелки от сервера к клиенту Playing stream

      stopStream идет только доя PLAYING сессий, для PUBLISHING есть свой хук unPublishStream

    13. /apps/DefaultApp/snapshot

      На диаграмме выглядит так, что 200 OK в сторону REST клиента уходит (ну или статус задания меняется на DONE) только после срабатывания хука. Необходимо проверить, так это или нет, и, если не так, то скорректировать диграмму

    14. playRTSP

      Этот хук предназначен только для аутентификации https://docs.flashphoner.com/static/WCS53/Streaming_video_functions/Playing_a_video_stream_from_the_server/In_a_player_via_RTSP/#rtsp_playback_authentication_via_rest_hook

      URL, имя и другие параметры стрима при этом не меняются. В custom передаются параметры, которые должны проверяться (например, accessKey)

    15. /apps/DefaultApp/playHLS

      Этот хук предназначен только для аутентификации https://docs.flashphoner.com/static/WCS53/Streaming_video_functions/Playing_a_video_stream_from_the_server/In_a_browser_via_HLS/#hls_playback_authentication_using_rest_hook

      URL, имя и другие параметры стрима при этом не меняются. В custom передаются параметры, которые должны проверяться (например, accessKey)

    16. /apps/DefaultApp/connect

      Этот хук работает не только для Websocket (DefaultApp), но и для cdnApp, и для falshStreamingApp. Во всех случаях триггером служит сам факт установки TCP соединения. Поэтому правильнее будет не заостряться именно на Websocket

      диаграмма:

      1. Open Websoket and sebd connect меняем на TCP connect
    17. /apps/DefaultApp/SessionDebugStatusEvent

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

      исходным событием должен быть вызов Session.startDebug() на стороне клиента (WebSDK). возможно, этот функционал уже и не работает, нужно проверифицировать.

    18. /apps/DefaultApp/RecordingStatusEvent

      диаграмма:

      1. От клиента к серверу пунктирная стрелка Publishing stream
      2. От клиента к серверу стрелка POST /recorder/startup
      3. Далее POST /apps/DefaultApp/RecordingStatusEvent к бэкенду и т.д.

      и надо проверифицировать, отправляется ли этот хук, не помню, чтобы видел его в логах сервера

    19. The hook is informational

      диаграмма: Перед ConnectionStatusEvent нужно показать какое-то событие сессии. Например, перечеркнутая стрелка от клиента к серверу с надписью Disconnect.

    20. The hook is informational

      диаграмма: 1. Показываем от клиента к WCS /v3/call/startup 2. Показываем от WCS к PBX стрелку с подписью Call established 3. Дальше остается POST в сторону бэкенда и т.д.

    21. Overview of a typical hook-driven flow

      диаграмма: 1. Убрать Create Connection instance. Мы не показываем внутренние процессы сервера. 2. После Apply backend updates пунктирная стрелка в сторону клиента с подписью Connected 3. Убрать Create Stream instance 4. После Apply backend updates пунктирная стрелка от клиента к серверу с подписью Publishing stream

  2. Apr 2026
    1. Name of the stream published to Origin to inspect its delivery route

      маршруты показываются и для профилей поэтому можно так: The name of the stream published to Origin, or stream name by profile to inspect its delivery route

    2. /rest-api/v3/mixer/set_body_watermark

      в мастере примеры для текстовой ватермарки и картинки разделены, лучше, чтобы при мерже это не потерялось

    3. /rest-api/v3/mixer/set_stream_watermark

      в мастере примеры для текстовой ватермарки и картинки разделены, лучше, чтобы при мерже это не потерялось

    4. /rest-api/v3/inject2

      возможно, стрелка Playing stream1 должна быть выше, чем POST /inject2/startup. так нагляднее показывается, что поток заменяется у существующих зрителей, а не у новых

    5. /rest-api/v3/cdn/connection/reset_inbound

      обычно у нас с одной нодой один коннект: либо incoming, либо outgoing поэтому на диаграмме можно оставить только incoming connection

    6. /rest-api/v3/cdn/connection/reset_all

      то же, что для reset_inbound: у нас не может быть двух коннектов с одной нодой для этого случая нужно еще одну ноду на диаграмму добавить

    7. /rest-api/v3/push/rtmp/sound_on

      Нужна диаграмма, которая позволяет визуализировать вставку звука.

      По-сути это инжект звука в push/rtmp ногу.

    8. /rest-api/v3/publisher/startup

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

    9. /rest-api/v3/publisher/change_painter_strategy

      Также нужна диаграмма, если изменения применяются в реальном времени и зритель увидит например зеленый квадрат вместо красного.

    10. /rest-api/v3/multi_recorder/startup

      Нужна диаграмма, которая показывает как несколько стримов записываются в один MP4 файл в виде треков (дорожек). В этом случае, оправдано было бы показать MP4 файл как отдельного участника, чтобы подробно расписать как его треки (аудио видео) заполняются стримами. Например, если пишем в MP4 два стрима, в файле бует 4 трека.

    11. /rest-api/v3/mpegts/startup

      Нужна диаграмма. В диаграмме должен быть участник ffmpeg, который публикует MPEG TS стрим на порт выделенный сервером и полученный в 200 OK.

    12. /rest-api/v3/inject3/update

      Publishing stream Playing stream Playing stream

      Вопрос: файл 1 гигабайт будет загружаться и инжектиться прогрессивно? Если да, то:

      Loading file - процесс пунктирной стрелочкой.

      Если же ожидается полная загрузка файла перед инжектом, то - это запрос, сплошная стрелка.

    13. /rest-api/v3/inject2/startup

      Диаграмма.

      • Удалить участников Edge/Injected Content, Original Stream

      • Переименовать участника Client > REST Client

      • Переименовать WCS Server > WCS

      • Добавить участников Client, HTTP Server

      • 202 в 200

      и т. д

      Переделать диаграмму под согласованные требования.

    14. 5. HLS ABR (CDN, Transcoder Node)

      Замечания те же, что и к 1 и 2 HLS.

      За основу просьба взять WebRTC ABR, показать что транскодинг на Транскодер - ноде, Edge пулит стрим с Транскодер, на Edge происходит конвертация HLS ABR.

      Description

    15. 4. HLS ABR (CDN, Edge Transcoding)

      Замечания те же что и к диаграммам 1 и 2 HLS.

      • Publishing stream
      • Pulling stream
      • Converting to HLS
      • Playing HLS ABR chunks
      • etc

      Также просьба взять за пример WebRTC ABR, где показано что вначале идет транскодинг по профилям, и далее конвертация в ABR.

      Description

    16. 2. HLS (CDN: Origin + Edge)

      HLS Player Publishing stream Remove label "Stream already published" Converting to HLS - процесс Pull stream Pulling stream - Edge никогда не забирает стрим с Origin по HLS. Playing HLS chunks

      Конвертация в HLS происходит на Edge

    17. 1. HLS (Single Node)

      Publishing stream - лэйбл не нужен, везде без лэйблов

      Converting stream to HLS - пунктирная стрелка

      Вместо участника Client будет HLS Player, потому что наш Client не умеет играть HLS, а подключается в основном по вебсокету.

      Вместо Origin - WCS, т.к. эта диаграмма вне контекста CDN.

      Варианты:

      Playing HLS chunks Playing HLS Playing HLS segments

      т. к. playlist для пользователя может путаться с плейлистом плеера, где много записей.

  3. Mar 2026
    1. /rest-api/v3/stream/rtc_metrics/update_batch

      На диаграмме должно быть минимум Client 1, Client 2, т. к. диаграмма демонстрирует batch.

    2. /rest-api/v3/stream/send_event

      Нужна диаграмма, т.к Event доходит до клиента. Например можно отправить сообщение через stream и его получат все подписчики стрима.

      Кроме того, Event может пропагироваться до Edge через CDN, но этот функционал надо уточнить. Если есть то также нужна схема.

    3. /rest-api/v3/sfu/rtc_metrics/update_batch

      Диаграмма. Что такое sfuCallback? Должно быть действительное вебсокет сообщение.

      Например: webRtcMetricsUpdate (уточнить)

    4. /rest-api/v3/sfu/rtc_metrics/update_all

      Диаграмма. Что такое sfuCallback? Должно быть действительное вебсокет сообщение.

      Например: webRtcMetricsUpdate (уточнить)

    5. /rest-api/v3/rels/startup

      Нужна диаграмма.

      RELS метрики записываются в

      1. Файловую систему.
      2. Базу данных ClickHouse

      ClickHouse - участник диаграммы.

    6. Additionally, the source stream can be adapted to the desired resolution (width × height) of the RTMP stream:

      Transcoding stream

      Label: Transcoding width height, gop, etc.

      RTMP - это протокол, в него не транскодируют.

    7. /rest-api/v3/push/rtmp/startup

      Диаграмма.

      Тот же вопрос что и push/webrtc

      Последовательность должна быть:

      1. /startup
      2. converting
      3. pushing
      4. 200 OK

      Еще должна быть вторая диаграмма, т.к. если в параметрах будут указаны настройки width, height, то пуш пойдет с Транскодингом, т.е. появится еще один длительный процесс Transcoding перед Converting.

    8. /rest-api/v3/mixer/startup

      Диаграмма

      Publishing stream1

      /mixer/startup

      Mixer output stream 'mixed_stream' is created

      200 OK

      /mixer/add

      stream1 is added to mixed_stream

      200 OK

      Playing mixed_stream

      Label: The mixed_stream contains stream1 content

    9. /rest-api/v3/logger/enable_client_log

      Нужна диаграмма:

      1. Client соединяется с сервером и имеет sessionId
      2. Для этого коннекта включается лог.
      3. Лог пишется на стороне сервера для этого sessionId
    10. /rest-api/v3/jobs/cancel

      Диаграмма

      1. На серевре выполняется Job
      2. Приходит запрос на отмену.
      3. Job завершается (отменяется).
    11. /rest-api/v3/inject3/startup

      Нужна диаграмма

      inject3 - инжектит статику inject2 - инжектит стримы

      Поэтому у них будут разные диаграммы.

    12. /rest-api/v3/data/send

      Нужна диаграмма.

      1. Client - соединяется с сервером по вебсокету.

      2. В сторону Client передается конкретное вебсокет сообщение, насколько помню OnDataEvent (проверить)

    13. /rest-api/v3/data/batch_send

      Нужна диаграмма.

      1. Client1 Client2 - соединяются с сервером по вебсокету.

      2. В сторону Client передается конкретное вебсокет сообщение, насколько помню OnDataEvent (проверить)

    14. /rest-api/v3/hls/startup

      Нужны диаграммы

      1. HLS, не ABR, Single Node
      2. HLS, не ABR, в CDN
      3. HLS ABR, Single Node (транскодинг на этой же ноде)
      4. HLS ABR, в CDN (транскодинг на Edge)
      5. HLS ABR, в CDN (транскодинг на Transcoder)
    15. Convert incoming RTP into an internal stream using toStream

      Диаграмма.

      Добавить участника Client, который играет стрим.

      Playing stream

      Добавить 200 OK

    16. /rest-api/v3/cdn/show_redundant_transcodings

      По новым обозначениям должно быть так:

      Publishing stream Pull stream Pulling stream Pull stream Pulling stream

    17. /rest-api/v3/connection/set_log_level

      Диаграмма.

      1. Client устанавливает соединение с сервером.
      2. Сервер /set_log_level
      3. НА СЕРВЕРЕ пишется лог для соединения sessionId, поэтому log_level применяется к серверному логу и никак не действует на Client.
    18. /rest-api/v3/pull/rtmp/startup

      Диаграмма

      Pull RTMP

      Play - т. к. стрим можно играть не только по WebRTC, например по RTSP или HLS

      Playing stream - т. к. стрим можно играть не только по WebRTC, например по RTSP или HLS

    19. /rest-api/v3/recorder/startup

      Нужна диаграмма. Запись - это длительный процесс, который можно показать пунктирной стрелкой.

    20. Capture VOD stream from a file hosted on a remote server (e.g., S3 or any HTTP server):

      Request MP4 file - потому что Play, а не Plays

      Downloading MP4 file - потому что процесс скачивания по HTTP может занять минуты, пунктирная стрелка.

      Converting - пунктирная

    21. Capture VOD stream from file
      1. Converting MP4 file to stream т. к. это процесс

      2. Playing stream

      3. Файл можно загружать с S3 или с HTTP Server Поэтому можно добавить участника:

      S3 or HTTP

    22. /rest-api/v3/push/webrtc/startup

      Диаграмма.

      У нас стейт джоба завязан на агента, поэтому 200 OK вернет только тогда, когда агент без ошибок начнет Push.

      Поэтому последовательность должна быть такой:

      1. /startup
      2. Pushing WebRTC
      3. 200 OK

      В остальном, вопросов нет.

    23. /rest-api/v3/rtsp/startup

      Диаграмма.

      Pulling RTSP stream - т. к. может быть audio+video stream.

      Converting RTSP to internal stream

      Playing stream - т. к, стрим можно играть не только по WebRTC, а например по RTMP или HLS

    24. /rest-api/v3/transcoder2/startup

      Диаграмма:

      Transcoding stream to target parameters - длительное действие

      Publishing a stream

      Playing stream - НЕ playback, НЕ Play, во всех схемах к одной терминологии

    25. Adapts the stream for playback at different qualities:

      По диаграмме:

      1. Publishing a stream

      Т. к. стрим может быть любым, например RTMP

      2. Republish stream as WebRtc ABR - не верно, т. к. републикации не происходит.

      Converting stream to WebRTC ABR

      Стрим конвертируется в WebRTC ABR по профилям, поэтому можно добавить текст - в какие профили стрим конвертируется, например:

      profiles: 720p, 360p

      4. Play WebRTC ABR stream - лучше обозначать процесс

      Playing WebRTC ABR stream

      Здесь также можно добавить, что играют те же два профиля:

      profiles: 720p, 360p

    26. If CDN chain contains transcoder node, stream is converted on that node:

      Предлагаю добавить:

      Converting stream to WebRTC ABR

      Чтобы показать, что конвертация происходит на Edge, в то время как транскодинг происходит на Transcoder

    27. Can request the stream from another node:

      Здесь возможно два случая

      1. Транскодирование для WebRTC ABR на Edge
      2. Транскодирование для WebRTC ABR на Transcoder

      Соответственно схемы будет две.

      1. Publishing a stream
      2. Pulling stream
      3. Transcoding stream to profiles label: profiles: 720p, 360p
      4. Converting stream to WebRTC ABR label: profiles: 720p, 360p
      5. Playing WebRTC ABR label: profiles: 720p, 360p
  4. Oct 2025
    1. Key Revisions from Previous Outline Opening: Now starts with March 2020 crisis moment, not methodological discovery Context Before Method: Institutional context and theory come before explaining data collection Orphan Comments: Moved to Chapter 2 where it makes sense methodologically Evidence Flow: Pre-pandemic baseline consolidated in 1.2.2, referenced elsewhere Narrative Logic: Crisis -> Context -> Theory -> Method -> Preview Implementation Notes Total target: 14,000-15,000 words Each evidence ID appears in ONE primary location Cross-references use section numbers, not repetition Transitions connect sections without redundancy

      Move to the very bottom of the page below the works cited and continuously update based on newly explicit directions/protocol

    2. (how CUNY’s digital communities responded to systematic institutional crises, how students constructed educational infrastructure through peer networks, how platform architectures shaped crisis resilience)

      WAY too long of a parenthesis. Restructure this sentence so that the examples come after the point.

    3. Reddit’s pseudonymity enables what Proferes (2017) calls “context collapse management.” Users

      Incorporate Neussanbaum and boyd in this paragraph as well as an important critical counterpoint that builds toward this point on context collapse management

    1. This temporal mismatch—crisis operating 24/7 while support operates 40 hours weekly—creates the necessity for peer networks analyzed in this chapter and documented ethnographically in Chapter 3.

      Remove adjective 'temporal' and revise sentence structure with theoretical support from Jonathan Crary's 24/7, particularly his commentary on the ends of sleep amid the late capitalist state of constant socioeconomic hardship and compounding austerity conditions.

  5. Aug 2024
    1. two decades ago, the influential environmentalist Herbert Girardet (1999) was still posing the relationship between the two as a potential ‘contradiction in terms’. What happened? Why does everyone think cities can save the planet, and why now?

      for - question - sustainable cities - how did the contradiction of sustainability and cities posed by Herbert Girardet in 1999 get resolved?

  6. Jan 2023
  7. May 2022
  8. Nov 2021
  9. Sep 2021
  10. Jun 2021
  11. Nov 2020
  12. Feb 2018
    1. Run the CREATE DATABASE command. Click

      I got briefly stuck on the first sentence before noticing the second sentence says how. Maybe "Run the CREATE DATABASE command by either clicking on the lightning bolt icon in the upper left, or choosing Query > Execute Current Statement in the menu." Actually, I'm still stuck—the lightning bolt is grayed out/unclickable, as is the menu option. I tried both while the command was highlighted, and while the command was not highlighted. I also saved the file and then tried.

    2. However, there are times when databases are very useful including: Placing the results of an R program on a web site where the data can be interacted with. Handling large amounts of data. Storing the results of long running programs so that a program can continue from where it left off in case it was interrupted.

      Nice

    3. R language

      I know there's a good way to google questions about R that gets search results actually about the R language... but can't remember what it is. Might be nice to mention that someone in the less, maybe in a tips section?

    4. Using a database also offered the ability to recover from errors when my R program stopped during processing. Since the database stores the most recently processed work, the R program was able to begin from where it left off before it ran into an error. This was very important because I did not want to waste days of processing by starting over from the beginning.

      Excellent explanation!

    5. Introduction

      I really like how you situate this lesson as a response to a real scholarly problem you ran into! You might consider preceding this with a few skimmable points so that visitors can tell whether the lesson fits their needs or not. E.g. with my lesson, I started with:

      1. a single-sentence summary of why you might want to read the lesson (novice-friendly language)
      2. what you'll be able to do by the end of the lesson
      3. any software/hardware requirements
      4. difficulty level of the lesson (do you need any previous knowledge? e.g. knowing what a "finding aid" is or how to make an HTML file like your first index example)
  13. Oct 2014
    1. loaded whenever you return to the document.

      We should really mention that this works when the content changes. Its one of our key features.

      "loaded whenever you return to the document even if the content changes".