|
ascii-chat 0.6.0
Real-time terminal-based video chat with ASCII art conversion
|
SDP (Session Description Protocol) for WebRTC audio/video negotiation. More...
Go to the source code of this file.
Data Structures | |
| struct | opus_config_t |
| Opus codec parameters for ascii-chat. More... | |
| struct | terminal_format_params_t |
| Terminal rendering format parameters. More... | |
| struct | terminal_capability_t |
| Supported terminal capability (for offer/answer) More... | |
| struct | sdp_session_t |
| SDP media session (simplified for WebRTC) More... | |
Enumerations | |
| enum | acip_codec_t { ACIP_CODEC_TRUECOLOR = 96 , ACIP_CODEC_256COLOR = 97 , ACIP_CODEC_16COLOR = 98 , ACIP_CODEC_MONO = 99 } |
| Terminal rendering capability payload types. More... | |
Functions | |
| asciichat_error_t | sdp_generate_offer (const terminal_capability_t *capabilities, size_t capability_count, const opus_config_t *audio_config, const terminal_format_params_t *format, sdp_session_t *offer_out) |
| Generate SDP offer (client side) | |
| asciichat_error_t | sdp_generate_answer (const sdp_session_t *offer, const terminal_capability_t *server_capabilities, size_t server_capability_count, const opus_config_t *audio_config, const terminal_format_params_t *server_format, sdp_session_t *answer_out) |
| Generate SDP answer (server side) | |
| asciichat_error_t | sdp_parse (const char *sdp_string, sdp_session_t *session) |
| Parse SDP offer or answer. | |
| asciichat_error_t | sdp_get_selected_video_codec (const sdp_session_t *answer, acip_codec_t *selected_codec, terminal_format_params_t *selected_format) |
| Extract selected video codec from SDP answer. | |
| asciichat_error_t | sdp_detect_terminal_capabilities (terminal_capability_t *capabilities, size_t capability_count, size_t *detected_count) |
| Detect client terminal capabilities at startup. | |
| void | sdp_session_free (sdp_session_t *session) |
| Free SDP session resources. | |
| const char * | sdp_codec_name (acip_codec_t codec) |
| Get human-readable codec name. | |
| const char * | sdp_renderer_name (int renderer_type) |
| Get human-readable renderer name. | |
SDP (Session Description Protocol) for WebRTC audio/video negotiation.
Handles SDP offer/answer generation and parsing for WebRTC connections. Includes:
Client (Joiner) generates OFFER:
Server (Creator) generates ANSWER:
These are RTP payload types that represent terminal rendering modes:
Definition in file sdp.h.
| enum acip_codec_t |
Terminal rendering capability payload types.
These are custom "codecs" that represent terminal rendering modes. Used in SDP to negotiate which color mode both peers can support.
| Enumerator | |
|---|---|
| ACIP_CODEC_TRUECOLOR | 24-bit RGB (truecolor) |
| ACIP_CODEC_256COLOR | 256-color (xterm palette) |
| ACIP_CODEC_16COLOR | 16-color (ANSI standard) |
| ACIP_CODEC_MONO | Monochrome (ASCII only) |
Definition at line 76 of file sdp.h.
| const char * sdp_codec_name | ( | acip_codec_t | codec | ) |
Get human-readable codec name.
| codec | Codec type |
Definition at line 21 of file sdp.c.
References ACIP_CODEC_16COLOR, ACIP_CODEC_256COLOR, ACIP_CODEC_MONO, and ACIP_CODEC_TRUECOLOR.
Referenced by sdp_generate_answer(), sdp_generate_offer(), and sdp_get_selected_video_codec().
| asciichat_error_t sdp_detect_terminal_capabilities | ( | terminal_capability_t * | capabilities, |
| size_t | capability_count, | ||
| size_t * | detected_count | ||
| ) |
Detect client terminal capabilities at startup.
Auto-detects from environment and terminal:
| capabilities | Detected capabilities (output) |
| capability_count | Maximum capabilities to detect |
| detected_count | Actual number detected (output) |
Definition at line 561 of file sdp.c.
References ACIP_CODEC_16COLOR, ACIP_CODEC_256COLOR, ACIP_CODEC_MONO, ACIP_CODEC_TRUECOLOR, ASCIICHAT_OK, terminal_format_params_t::charset, terminal_capability_t::codec, terminal_size_t::cols, terminal_format_params_t::compression, terminal_format_params_t::csi_rep_support, ERROR_INVALID_PARAM, terminal_capability_t::format, terminal_format_params_t::height, log_debug, terminal_format_params_t::renderer, terminal_size_t::rows, SAFE_GETENV, SET_ERRNO, TERM_COLOR_16, TERM_COLOR_256, TERM_COLOR_NONE, TERM_COLOR_TRUECOLOR, terminal_get_size(), and terminal_format_params_t::width.
| asciichat_error_t sdp_generate_answer | ( | const sdp_session_t * | offer, |
| const terminal_capability_t * | server_capabilities, | ||
| size_t | server_capability_count, | ||
| const opus_config_t * | audio_config, | ||
| const terminal_format_params_t * | server_format, | ||
| sdp_session_t * | answer_out | ||
| ) |
Generate SDP answer (server side)
Creates an SDP answer by selecting best mutually-supported mode from offer. Server enforces its rendering constraints.
| offer | Received SDP offer from client |
| server_capabilities | Array of server-supported capabilities |
| server_capability_count | Number of server capabilities |
| audio_config | Opus codec configuration |
| server_format | Server's rendering constraints |
| answer_out | Generated SDP answer (output) |
Definition at line 168 of file sdp.c.
References ASCIICHAT_OK, sdp_session_t::audio_config, terminal_format_params_t::charset, terminal_capability_t::codec, terminal_format_params_t::compression, terminal_format_params_t::csi_rep_support, ERROR_INVALID_PARAM, terminal_capability_t::format, sdp_session_t::has_audio, sdp_session_t::has_video, terminal_format_params_t::height, log_debug, terminal_format_params_t::renderer, SAFE_MALLOC, SAFE_STRNCPY, sdp_codec_name(), sdp_session_t::sdp_length, sdp_renderer_name(), sdp_session_t::sdp_string, sdp_session_t::session_id, sdp_session_t::session_version, SET_ERRNO, sdp_session_t::video_codec_count, sdp_session_t::video_codecs, sdp_session_t::video_format, and terminal_format_params_t::width.
| asciichat_error_t sdp_generate_offer | ( | const terminal_capability_t * | capabilities, |
| size_t | capability_count, | ||
| const opus_config_t * | audio_config, | ||
| const terminal_format_params_t * | format, | ||
| sdp_session_t * | offer_out | ||
| ) |
Generate SDP offer (client side)
Creates an SDP offer with:
| capabilities | Array of supported terminal capabilities |
| capability_count | Number of capabilities |
| audio_config | Opus codec configuration |
| format | Format parameters for video section |
| offer_out | Generated SDP offer (output) |
Definition at line 53 of file sdp.c.
References ASCIICHAT_OK, sdp_session_t::audio_config, terminal_format_params_t::charset, terminal_format_params_t::compression, terminal_format_params_t::csi_rep_support, ERROR_INVALID_PARAM, terminal_capability_t::format, sdp_session_t::has_audio, sdp_session_t::has_video, terminal_format_params_t::height, log_debug, terminal_format_params_t::renderer, SAFE_MALLOC, sdp_codec_name(), sdp_session_t::sdp_length, sdp_renderer_name(), sdp_session_t::sdp_string, sdp_session_t::session_id, sdp_session_t::session_version, SET_ERRNO, sdp_session_t::video_codec_count, sdp_session_t::video_codecs, sdp_session_t::video_format, and terminal_format_params_t::width.
| asciichat_error_t sdp_get_selected_video_codec | ( | const sdp_session_t * | answer, |
| acip_codec_t * | selected_codec, | ||
| terminal_format_params_t * | selected_format | ||
| ) |
Extract selected video codec from SDP answer.
Determines which terminal rendering capability the peer selected.
| answer | SDP answer from peer |
| selected_codec | Selected codec (output) |
| selected_format | Format parameters (output) |
Definition at line 534 of file sdp.c.
References ASCIICHAT_OK, terminal_capability_t::codec, ERROR_INVALID_PARAM, ERROR_NOT_FOUND, terminal_capability_t::format, sdp_session_t::has_video, terminal_format_params_t::height, log_debug, sdp_codec_name(), SET_ERRNO, sdp_session_t::video_codec_count, sdp_session_t::video_codecs, and terminal_format_params_t::width.
| asciichat_error_t sdp_parse | ( | const char * | sdp_string, |
| sdp_session_t * | session | ||
| ) |
Parse SDP offer or answer.
Parses an SDP string and extracts audio/video configurations.
| sdp_string | SDP string (null-terminated) |
| session | Parsed session (output) |
Definition at line 318 of file sdp.c.
References ACIP_CODEC_16COLOR, ACIP_CODEC_256COLOR, ACIP_CODEC_MONO, ACIP_CODEC_TRUECOLOR, ASCIICHAT_OK, sdp_session_t::audio_config, opus_config_t::bitrate, opus_config_t::channels, terminal_format_params_t::charset, terminal_capability_t::codec, terminal_format_params_t::compression, terminal_format_params_t::csi_rep_support, opus_config_t::dtx_enabled, ERROR_INVALID_PARAM, opus_config_t::fec_enabled, terminal_capability_t::format, opus_config_t::frame_duration, sdp_session_t::has_audio, sdp_session_t::has_video, terminal_format_params_t::height, terminal_format_params_t::renderer, SAFE_MALLOC, SAFE_STRNCPY, opus_config_t::sample_rate, sdp_session_t::sdp_length, sdp_session_t::sdp_string, sdp_session_t::session_id, SET_ERRNO, sdp_session_t::video_codec_count, sdp_session_t::video_codecs, and terminal_format_params_t::width.
| const char * sdp_renderer_name | ( | int | renderer_type | ) |
Get human-readable renderer name.
Definition at line 36 of file sdp.c.
Referenced by sdp_generate_answer(), and sdp_generate_offer().
| void sdp_session_free | ( | sdp_session_t * | session | ) |
Free SDP session resources.
| session | Session to free |
Definition at line 665 of file sdp.c.
References SAFE_FREE, sdp_session_t::video_codec_count, and sdp_session_t::video_codecs.