mirror of
https://github.com/LukeHagar/plexpy.git
synced 2025-12-07 20:57:45 +00:00
* `plex_api.library_playlists.add_playlist_items()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.hubs.get_metadata_hubs()`: * `request.only_transient` **Changed** * `response.media_container.hub.[].metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library_collections.move_collection_item()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library_collections.delete_collection_item()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library_collections.add_collection_items()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.content.get_sonically_similar()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.butler.stop_task()`: `request` **Changed** **Breaking** ⚠️ * `plex_api.butler.start_task()`: `request` **Changed** **Breaking** ⚠️ * `plex_api.content.get_sonic_path()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.download_queue.get_item_decision()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.hubs.get_all_hubs()`: * `request.only_transient` **Changed** * `response.media_container.hub.[].metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.hubs.get_continue_watching()`: `response.media_container.hub.[].metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.hubs.get_promoted_hubs()`: `response.media_container.hub.[].metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.content.get_all_leaves()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.hubs.get_postplay_hubs()`: * `request.only_transient` **Changed** * `response.media_container.hub.[].metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.hubs.get_related_hubs()`: * `request.only_transient` **Changed** * `response.media_container.hub.[].metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.hubs.get_section_hubs()`: * `request.only_transient` **Changed** * `response.media_container.hub.[].metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.content.list_content()`: * `request` **Changed** * `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.content.get_albums()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.search.search_hubs()`: `response.media_container.hub.[].metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.search.voice_search_hubs()`: * `request.type` **Changed** **Breaking** ⚠️ * `response.media_container.hub.[].metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.get_library_items()`: * `request.media_query` **Changed** * `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.ingest_transient_item()`: * `request` **Changed** * `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.get_library_matches()`: * `request` **Changed** **Breaking** ⚠️ * `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.content.get_metadata_item()`: * `request` **Changed** * `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.get_sections()`: `response.media_container.directory.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.add_section()`: * `request` **Changed** * `response.media_container.directory.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.get_tags()`: * `request.type` **Changed** **Breaking** ⚠️ * `plex_api.content.get_collection_items()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.get_all_item_leaves()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.status.list_sessions()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.play_queue.move_play_queue_item()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.get_extras()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.play_queue.delete_play_queue_item()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.play_queue.unshuffle()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.list_matches()`: * `request.manual` **Changed** * `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.list_sonically_similar()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.play_queue.reset_play_queue()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.get_related_items()`: `response.media_container.hub.[].metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.list_similar()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.play_queue.clear_play_queue()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.get_item_tree()`: `response.media_container.metadata_item.[]` **Changed** **Breaking** ⚠️ * `plex_api.play_queue.add_to_play_queue()`: * `request.next` **Changed** * `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.play_queue.get_play_queue()`: * `request` **Changed** * `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library_playlists.move_playlist_item()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.get_person()`: `response.media_container.directory.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.list_person_media()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library_playlists.get_playlist_generator_items()`: `response.media_container.metadata` **Changed** **Breaking** ⚠️ * `plex_api.library.get_library_details()`: * `request.include_details` **Changed** * `response.media_container.directory.[]` **Changed** **Breaking** ⚠️ * `plex_api.library_playlists.modify_playlist_generator()`: * `request.item` **Changed** * `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.autocomplete()`: * `request.media_query` **Changed** * `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.get_collections()`: * `request.media_query` **Changed** * `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.get_common()`: * `request.media_query` **Changed** * `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library_playlists.delete_playlist_item()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library_playlists.clear_playlist_items()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.play_queue.shuffle()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library_playlists.create_playlist()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.playlist.get_playlist_items()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.playlist.get_playlist()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.collections.create_collection()`: * `request.type` **Changed** **Breaking** ⚠️ * `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.dv_rs.tune_channel()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.live_tv.get_sessions()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.live_tv.get_live_tv_session()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.playlist.list_playlists()`: `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.subscriptions.get_all_subscriptions()`: * `request` **Changed** * `response.media_container.media_subscription.[].media_grab_operation.[].metadata` **Changed** **Breaking** ⚠️ * `plex_api.subscriptions.create_subscription()`: `response.media_container.media_subscription.[].media_grab_operation.[].metadata` **Changed** **Breaking** ⚠️ * `plex_api.subscriptions.get_scheduled_recordings()`: `response.media_container.media_grab_operation.[].metadata` **Changed** **Breaking** ⚠️ * `plex_api.subscriptions.get_template()`: `response.media_container.subscription_template.[].media_subscription.[].media_grab_operation.[].metadata` **Changed** **Breaking** ⚠️ * `plex_api.subscriptions.get_subscription()`: * `request` **Changed** * `response.media_container.media_subscription.[].media_grab_operation.[].metadata` **Changed** **Breaking** ⚠️ * `plex_api.subscriptions.edit_subscription_preferences()`: `response.media_container.media_subscription.[].media_grab_operation.[].metadata` **Changed** **Breaking** ⚠️ * `plex_api.subscriptions.reorder_subscription()`: `response.media_container.media_subscription.[].media_grab_operation.[].metadata` **Changed** **Breaking** ⚠️ * `plex_api.transcoder.make_decision()`: * `request` **Changed** * `response.media_container.metadata.[]` **Changed** **Breaking** ⚠️ * `plex_api.library.refresh_items_metadata()`: * `request.mark_updated` **Changed** * `plex_api.authentication.post-users-sign-in-data()`: **Added** * `plex_api.transcoder.start_transcode_session()`: `request` **Changed** * `plex_api.devices.modify_device()`: * `request.enabled` **Changed** * `plex_api.library.get_media_part()`: * `request.download` **Changed** * `plex_api.library.detect_intros()`: * `request.force` **Changed** * `plex_api.library.refresh_section()`: * `request.force` **Changed** * `plex_api.library_playlists.upload_playlist()`: * `request.force` **Changed** * `plex_api.library.delete_media_item()`: * `request.proxy` **Changed** * `plex_api.authentication.get_token_details()`: **Added** * `plex_api.library.get_first_characters()`: * `request.media_query` **Changed** * `plex_api.library.update_items()`: * `request.field.locked` **Changed** * `plex_api.library.delete_library_section()`: * `request.async` **Changed** * `plex_api.library.set_stream_selection()`: * `request.all_parts` **Changed** * `plex_api.play_queue.create_play_queue()`: `request` **Changed** * `plex_api.library.get_augmentation_status()`: * `request.wait` **Changed** * `plex_api.library.detect_voice_activity()`: `request` **Changed** * `plex_api.transcoder.transcode_image()`: `request` **Changed** * `plex_api.transcoder.transcode_subtitles()`: `request` **Changed** * `plex_api.library.add_subtitles()`: `request` **Changed** * `plex_api.library.get_stream()`: * `request.auto_adjust_subtitle` **Changed** * `plex_api.library.start_bif_generation()`: * `request.force` **Changed** * `plex_api.library.detect_credits()`: `request` **Changed** * `plex_api.ultra_blur.get_image()`: * `request.noise` **Changed** * `plex_api.library.generate_thumbs()`: * `request.force` **Changed** * `plex_api.updater.apply_updates()`: `request` **Changed** * `plex_api.updater.check_updates()`: * `request.download` **Changed** * `plex_api.library.delete_metadata_item()`: * `request.proxy` **Changed** * `plex_api.library.optimize_database()`: * `request.async` **Changed** * `plex_api.hubs.update_hub_visibility()`: `request` **Changed** * `plex_api.hubs.create_custom_hub()`: `request` **Changed** * `plex_api.library.get_section_image()`: * `request.media_query` **Changed** * `plex_api.download_queue.add_download_queue_items()`: `request` **Changed** * `plex_api.timeline.report()`: `request` **Changed** * `plex_api.general.get_source_connection_information()`: * `request.refresh` **Changed** * `plex_api.plex.get-server-resources()`: **Added** * `plex_api.users.get-users()`: **Added**
63 lines
20 KiB
Markdown
63 lines
20 KiB
Markdown
# Stream
|
|
|
|
`Stream` represents a particular stream from a media item, such as the video stream, audio stream, or subtitle stream. The stream may either be part of the file represented by the parent `Part` or, especially for subtitles, an external file. The stream contains more detailed information about the specific stream. For example, a video may include the `aspectRatio` at the `Media` level, but detailed information about the video stream like the color space will be included on the `Stream` for the video stream. Note that photos do not have streams (mostly as an optimization).
|
|
|
|
|
|
|
|
## Fields
|
|
|
|
| Field | Type | Required | Description | Example |
|
|
| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
|
|
| `default` | *Optional[bool]* | :heavy_minus_sign: | Indicates if this stream is default. | true |
|
|
| `audio_channel_layout` | *Optional[str]* | :heavy_minus_sign: | Audio channel layout. | 5.1(side) |
|
|
| `channels` | *Optional[int]* | :heavy_minus_sign: | Number of audio channels (for audio streams). | 6 |
|
|
| `bit_depth` | *Optional[int]* | :heavy_minus_sign: | Bit depth of the video stream. | 10 |
|
|
| `dovibl_compat_id` | *Optional[int]* | :heavy_minus_sign: | Dolby Vision BL compatibility ID. | 1 |
|
|
| `dovibl_present` | *Optional[bool]* | :heavy_minus_sign: | Indicates if Dolby Vision BL is present. | true |
|
|
| `doviel_present` | *Optional[bool]* | :heavy_minus_sign: | Indicates if Dolby Vision EL is present. | false |
|
|
| `dovi_level` | *Optional[int]* | :heavy_minus_sign: | Dolby Vision level. | 6 |
|
|
| `dovi_present` | *Optional[bool]* | :heavy_minus_sign: | Indicates if Dolby Vision is present. | true |
|
|
| `dovi_profile` | *Optional[int]* | :heavy_minus_sign: | Dolby Vision profile. | 8 |
|
|
| `dovirpu_present` | *Optional[bool]* | :heavy_minus_sign: | Indicates if Dolby Vision RPU is present. | true |
|
|
| `dovi_version` | *Optional[str]* | :heavy_minus_sign: | Dolby Vision version. | 1.0 |
|
|
| `bitrate` | *Optional[int]* | :heavy_minus_sign: | Bitrate of the stream. | 24743 |
|
|
| `can_auto_sync` | *Optional[bool]* | :heavy_minus_sign: | Indicates if the stream can auto-sync. | false |
|
|
| `chroma_location` | *Optional[str]* | :heavy_minus_sign: | Chroma sample location. | topleft |
|
|
| `chroma_subsampling` | *Optional[str]* | :heavy_minus_sign: | Chroma subsampling format. | 4:2:0 |
|
|
| `coded_height` | *Optional[int]* | :heavy_minus_sign: | Coded video height. | 1608 |
|
|
| `coded_width` | *Optional[int]* | :heavy_minus_sign: | Coded video width. | 3840 |
|
|
| `closed_captions` | *Optional[bool]* | :heavy_minus_sign: | N/A | true |
|
|
| `codec` | *str* | :heavy_check_mark: | Codec used by the stream. | hevc |
|
|
| `color_primaries` | *Optional[str]* | :heavy_minus_sign: | Color primaries used. | bt2020 |
|
|
| `color_range` | *Optional[str]* | :heavy_minus_sign: | Color range (e.g., tv). | tv |
|
|
| `color_space` | *Optional[str]* | :heavy_minus_sign: | Color space. | bt2020nc |
|
|
| `color_trc` | *Optional[str]* | :heavy_minus_sign: | Color transfer characteristics. | smpte2084 |
|
|
| `display_title` | *str* | :heavy_check_mark: | Display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) |
|
|
| `extended_display_title` | *Optional[str]* | :heavy_minus_sign: | Extended display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) |
|
|
| `frame_rate` | *Optional[float]* | :heavy_minus_sign: | Frame rate of the stream. | 23.976 |
|
|
| `has_scaling_matrix` | *Optional[bool]* | :heavy_minus_sign: | N/A | false |
|
|
| `height` | *Optional[int]* | :heavy_minus_sign: | Height of the video stream. | 1602 |
|
|
| `id` | *int* | :heavy_check_mark: | Unique stream identifier. | 1002625 |
|
|
| `index` | *Optional[int]* | :heavy_minus_sign: | Index of the stream. | 0 |
|
|
| `key` | *str* | :heavy_check_mark: | Key to access this stream part. | /library/streams/216389 |
|
|
| `language` | *Optional[str]* | :heavy_minus_sign: | Language of the stream. | English |
|
|
| `language_code` | *Optional[str]* | :heavy_minus_sign: | ISO language code. | eng |
|
|
| `language_tag` | *Optional[str]* | :heavy_minus_sign: | Language tag (e.g., en). | en |
|
|
| `format_` | *Optional[str]* | :heavy_minus_sign: | Format of the stream (e.g., srt). | srt |
|
|
| `header_compression` | *Optional[bool]* | :heavy_minus_sign: | Indicates whether header compression is enabled. | true |
|
|
| `level` | *Optional[int]* | :heavy_minus_sign: | Video level. | 150 |
|
|
| `original` | *Optional[bool]* | :heavy_minus_sign: | Indicates if this is the original stream. | true |
|
|
| `profile` | *Optional[str]* | :heavy_minus_sign: | Video profile. | main 10 |
|
|
| `ref_frames` | *Optional[int]* | :heavy_minus_sign: | Number of reference frames. | 1 |
|
|
| `sampling_rate` | *Optional[int]* | :heavy_minus_sign: | Sampling rate for the audio stream. | 48000 |
|
|
| `scan_type` | *Optional[str]* | :heavy_minus_sign: | N/A | progressive |
|
|
| `embedded_in_video` | *Optional[str]* | :heavy_minus_sign: | N/A | progressive |
|
|
| `selected` | *Optional[bool]* | :heavy_minus_sign: | Indicates if this stream is selected (applicable for audio streams). | true |
|
|
| `forced` | *Optional[bool]* | :heavy_minus_sign: | N/A | true |
|
|
| `hearing_impaired` | *Optional[bool]* | :heavy_minus_sign: | Indicates if the stream is for the hearing impaired. | true |
|
|
| `dub` | *Optional[bool]* | :heavy_minus_sign: | Indicates if the stream is a dub. | true |
|
|
| `title` | *Optional[str]* | :heavy_minus_sign: | Optional title for the stream (e.g., language variant). | SDH |
|
|
| `stream_identifier` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 |
|
|
| `stream_type` | *Literal[1]* | :heavy_check_mark: | Stream type:<br/> - VIDEO = 1<br/> - AUDIO = 2<br/> - SUBTITLE = 3<br/> | |
|
|
| `width` | *Optional[int]* | :heavy_minus_sign: | Width of the video stream. | 3840 |
|
|
| `__pydantic_extra__` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | | |