streams
Every stream the container has declared so far, in index order, including streams this build cannot decode.
The open lists what it found. A live source can declare more while it plays, as a transport stream does when a channel's sound starts after its picture or a subtitle stream starts with the next programme, and the read during which FFmpeg adds one replaces this list with a longer one (#151). A list once returned never changes, a stream keeps its index, which is also its place in the list, and no stream is ever taken out: FFmpeg keeps a stream the container stops carrying, and that stream simply sends no more packets, as a quiet one does. Where the container has programs, such a stream leaves its programme, which is the only sign FFmpeg gives.
An entry holds what FFmpeg knew when it was read. FFmpeg adds a transport stream's stream from its programme table, which names only the kind of codec, so an MP2 sound first reads as MP3 with no sample rate and no channels, and FFmpeg's parser corrects that from the stream's first packet. So an entry read before FFmpeg had any of its stream's packets is read again when the first one comes through, and replaced when it changed: every entry of a stream added after the open, and an entry from the open whose codec is unknown, whose sound has no sample rate or no channel count, or whose picture has no size. The entry it replaced still names that stream to openPacketReader, PacketReader.reselect, openDecoder and openSubtitleDecoder.
The packet reader's reads and the decode flows' reads keep this current, and the first packet a reader hands out after it changed carries the new list as Packet.newStreams.
Every stream the container has declared so far, in index order, including streams this build cannot decode.
The open lists what it found. A live source can declare more while it plays, as a transport stream does when a channel's sound starts after its picture or a subtitle stream starts with the next programme, and the read during which FFmpeg adds one replaces this list with a longer one (#151). A list once returned never changes, a stream keeps its index, which is also its place in the list, and no stream is ever taken out: FFmpeg keeps a stream the container stops carrying, and that stream simply sends no more packets, as a quiet one does. Where the container has programs, such a stream leaves its programme, which is the only sign FFmpeg gives.
An entry holds what FFmpeg knew when it was read. FFmpeg adds a transport stream's stream from its programme table, which names only the kind of codec, so an MP2 sound first reads as MP3 with no sample rate and no channels, and FFmpeg's parser corrects that from the stream's first packet. So an entry read before FFmpeg had any of its stream's packets is read again when the first one comes through, and replaced when it changed: every entry of a stream added after the open, and an entry from the open whose codec is unknown, whose sound has no sample rate or no channel count, or whose picture has no size. The entry it replaced still names that stream to openPacketReader, PacketReader.reselect, openDecoder and openSubtitleDecoder.
The packet reader's reads and the decode flows' reads keep this current, and the first packet a reader hands out after it changed carries the new list as Packet.newStreams.
Every stream the container has declared so far, in index order, including streams this build cannot decode.
The open lists what it found. A live source can declare more while it plays, as a transport stream does when a channel's sound starts after its picture or a subtitle stream starts with the next programme, and the read during which FFmpeg adds one replaces this list with a longer one (#151). A list once returned never changes, a stream keeps its index, which is also its place in the list, and no stream is ever taken out: FFmpeg keeps a stream the container stops carrying, and that stream simply sends no more packets, as a quiet one does. Where the container has programs, such a stream leaves its programme, which is the only sign FFmpeg gives.
An entry holds what FFmpeg knew when it was read. FFmpeg adds a transport stream's stream from its programme table, which names only the kind of codec, so an MP2 sound first reads as MP3 with no sample rate and no channels, and FFmpeg's parser corrects that from the stream's first packet. So an entry read before FFmpeg had any of its stream's packets is read again when the first one comes through, and replaced when it changed: every entry of a stream added after the open, and an entry from the open whose codec is unknown, whose sound has no sample rate or no channel count, or whose picture has no size. The entry it replaced still names that stream to openPacketReader, PacketReader.reselect, openDecoder and openSubtitleDecoder.
The packet reader's reads and the decode flows' reads keep this current, and the first packet a reader hands out after it changed carries the new list as Packet.newStreams.
Every stream the container has declared so far, in index order, including streams this build cannot decode.
The open lists what it found. A live source can declare more while it plays, as a transport stream does when a channel's sound starts after its picture or a subtitle stream starts with the next programme, and the read during which FFmpeg adds one replaces this list with a longer one (#151). A list once returned never changes, a stream keeps its index, which is also its place in the list, and no stream is ever taken out: FFmpeg keeps a stream the container stops carrying, and that stream simply sends no more packets, as a quiet one does. Where the container has programs, such a stream leaves its programme, which is the only sign FFmpeg gives.
An entry holds what FFmpeg knew when it was read. FFmpeg adds a transport stream's stream from its programme table, which names only the kind of codec, so an MP2 sound first reads as MP3 with no sample rate and no channels, and FFmpeg's parser corrects that from the stream's first packet. So an entry read before FFmpeg had any of its stream's packets is read again when the first one comes through, and replaced when it changed: every entry of a stream added after the open, and an entry from the open whose codec is unknown, whose sound has no sample rate or no channel count, or whose picture has no size. The entry it replaced still names that stream to openPacketReader, PacketReader.reselect, openDecoder and openSubtitleDecoder.
The packet reader's reads and the decode flows' reads keep this current, and the first packet a reader hands out after it changed carries the new list as Packet.newStreams.
Every stream the container has declared so far, in index order, including streams this build cannot decode.
The open lists what it found. A live source can declare more while it plays, as a transport stream does when a channel's sound starts after its picture or a subtitle stream starts with the next programme, and the read during which FFmpeg adds one replaces this list with a longer one (#151). A list once returned never changes, a stream keeps its index, which is also its place in the list, and no stream is ever taken out: FFmpeg keeps a stream the container stops carrying, and that stream simply sends no more packets, as a quiet one does. Where the container has programs, such a stream leaves its programme, which is the only sign FFmpeg gives.
An entry holds what FFmpeg knew when it was read. FFmpeg adds a transport stream's stream from its programme table, which names only the kind of codec, so an MP2 sound first reads as MP3 with no sample rate and no channels, and FFmpeg's parser corrects that from the stream's first packet. So an entry read before FFmpeg had any of its stream's packets is read again when the first one comes through, and replaced when it changed: every entry of a stream added after the open, and an entry from the open whose codec is unknown, whose sound has no sample rate or no channel count, or whose picture has no size. The entry it replaced still names that stream to openPacketReader, PacketReader.reselect, openDecoder and openSubtitleDecoder.
The packet reader's reads and the decode flows' reads keep this current, and the first packet a reader hands out after it changed carries the new list as Packet.newStreams.