DE60036036T2 - Datenformat für einen Informationenstromempfänger - Google Patents

Datenformat für einen Informationenstromempfänger Download PDF

Info

Publication number
DE60036036T2
DE60036036T2 DE60036036T DE60036036T DE60036036T2 DE 60036036 T2 DE60036036 T2 DE 60036036T2 DE 60036036 T DE60036036 T DE 60036036T DE 60036036 T DE60036036 T DE 60036036T DE 60036036 T2 DE60036036 T2 DE 60036036T2
Authority
DE
Germany
Prior art keywords
data
information
stream
field
reader
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE60036036T
Other languages
English (en)
Other versions
DE60036036D1 (de
Inventor
William G. Parry
Serge Smirnov
Mingtzong Lee
Christopher W. Lorton
Jayachandran Raja
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of DE60036036D1 publication Critical patent/DE60036036D1/de
Application granted granted Critical
Publication of DE60036036T2 publication Critical patent/DE60036036T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/44004Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving video buffer management, e.g. video decoder buffer or video display buffer
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • G11B20/12Formatting, e.g. arrangement of data block or words on the record carriers
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B27/00Editing; Indexing; Addressing; Timing or synchronising; Monitoring; Measuring tape travel
    • G11B27/10Indexing; Addressing; Timing or synchronising; Measuring tape travel
    • G11B27/102Programmed access in sequence to addressed parts of tracks of operating record carriers
    • G11B27/105Programmed access in sequence to addressed parts of tracks of operating record carriers of operating discs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/234Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs
    • H04N21/23406Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs involving management of server-side video buffer
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/238Interfacing the downstream path of the transmission network, e.g. adapting the transmission rate of a video stream to network bandwidth; Processing of multiplex streams
    • H04N21/2389Multiplex stream processing, e.g. multiplex stream encrypting
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/433Content storage operation, e.g. storage operation in response to a pause request, caching operations
    • H04N21/4333Processing operations in response to a pause request
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/438Interfacing the downstream path of the transmission network originating from a server, e.g. retrieving encoded video stream packets from an IP network
    • H04N21/4385Multiplex stream processing, e.g. multiplex stream decrypting
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/83Generation or processing of protective or descriptive data associated with content; Content structuring
    • H04N21/845Structuring of content, e.g. decomposing content into time segments
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/83Generation or processing of protective or descriptive data associated with content; Content structuring
    • H04N21/845Structuring of content, e.g. decomposing content into time segments
    • H04N21/8455Structuring of content, e.g. decomposing content into time segments involving pointers to the content, e.g. pointers to the I-frames of the video stream
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • G11B20/10527Audio or video recording; Data buffering arrangements
    • G11B2020/1062Data buffering arrangements, e.g. recording or playback buffers
    • G11B2020/10629Data buffering arrangements, e.g. recording or playback buffers the buffer having a specific structure
    • G11B2020/10666Ring buffers, e.g. buffers wherein an iteratively progressing read or write pointer moves back to the beginning of the buffer when reaching the last storage cell

Landscapes

  • Engineering & Computer Science (AREA)
  • Signal Processing (AREA)
  • Multimedia (AREA)
  • Circuits Of Receivers In General (AREA)
  • Mobile Radio Communication Systems (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
  • Computer And Data Communications (AREA)
  • Signal Processing For Digital Recording And Reproducing (AREA)
  • Television Signal Processing For Recording (AREA)
  • Stereo-Broadcasting Methods (AREA)
  • Communication Control (AREA)

Description

  • HINTERGRUND DER ERFINDUNG
  • Die vorliegende Erfindung betrifft Strömungsinformation. Insbesondere betrifft die vorliegende Erfindung die Aufzeichnung von Strömungsinformation und die Rückgewinnung der gespeicherten Information zur selektiven Wiedergabe.
  • Mit Fortschritten in der Technologie, die schnellere Prozessoren, verbesserte Grafik usw. einschließen, kann ein Desktop-Computer Strömungsinformation einfach empfangen und dem Benutzer präsentieren. Alltägliche Beispiele von Strömungsinformation sind Audio- und Videoströme, die über Weitbereichsnetze, wie z.B. dem Internet, geliefert werden. Zum Beispiel werden Fernsehübertragungssignale, die ansonsten drahtlos unter Verwendung von Satelliten, Fernsehsendern usw. gesendet werden würden, codiert und zum Senden an entfernte Computerbenutzer über das Internet zur Verfügung gestellt. Auf Anforderung des Desktop-Computerbenutzers werden die codierten Datenpakete, die Audio- und Videodaten enthalten, nacheinander an den Desktop-Computerbenutzer gesendet. Nach Empfang werden die Datenpakete durch den Desktop-Computer decodiert und verarbeitet, um dem Benutzer die Strömungsinformation möglichst in Echtzeit zurückzugeben. Nach Wiedergabe oder Präsentation werden die Datenpakete weggeworfen.
  • Obwohl die Verarbeitung von Strömungsinformation in der oben beschriebenen Weise nützlich ist, gibt es eine Anzahl von Schwächen. Gegenwärtig wird Strömungsinformation auf Verlangen jedes Desktop-Computers bereitgestellt. Jeder Benutzer muss daher eine getrennte Verbindung mit der Quelle der Strömungsinformation herstellen, um die gewünschte Strömungsinformation zu empfangen. Wenn einmal eingeleitet, ist der Benutzer außerstande, die Art und Weise, in der Strömungsinformation zurückgegeben wird, zu kontrollieren. Zum Beispiel kann der Benutzer die ankommende Strömungsinformation nicht vorübergehend "anhalten", um eine andere Aufgabe durchzuführen und dann, wenn gewünscht, das Betrachten fortzusetzen. Desgleichen ist der Benutzer nicht in Lage, einen vorher wiedergegebenen Teil zu wiederholen, da die Datenpakete weggeworfen wurden, oder nach vorne zu springen, da die Datenpakete noch nicht empfangen wurden.
  • Es besteht daher eine fortdauernde Notwendigkeit, die Art und Weise, wie Strömungsinformation wiedergegeben wird, zu verbessern. Obwohl oben in Bezug auf einen Desktop-Computer und von dem Internet empfangene Strömungsinformation beschrieben, sollte der verbesserte Prozess auf andere Informationsgeräte oder Recheneinrichtungen und andere Formen von Strömungsinformation anwendbar sein.
  • EP 0 510 834 A2 beschreibt ein Verfahren und eine Vorrichtung zum Zugreifen auf Daten, die als verkettete Listen aufgezeichnet sind. Eine Vielzahl von Fortsetzungsketten wird gezeigt, wobei jede Kette aus vorgegeben großen Zuordnungsgruppen von adressierbaren Datenspeicherbereichen besteht. Auf jede der Ketten kann zugegriffen werden, um wenigstens einen Eintrag in einer der Fortsetzungsketten zu finden.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Es ist die Aufgabe der Erfindung, die Art und Weise zu verbessern in der Strömungsinformation wiedergegeben wird.
  • Diese Aufgabe wird durch die Erfindung wie in den unabhängigen Ansprüchen beansprucht gelöst.
  • Bevorzugte Ausführungen sind in den abhängigen Ansprüchen definiert.
  • Ein Datenblockformat für Strömungsinformation enthält ein erstes Datenblockgrößenfeld und ein zweites Datenblockgrößenfeld, wobei jedes der Felder die Größe des Datenblocks angibt. Ein Nutzlastfeld wird durch das erste Datenblockgrößenfeld und das zweite Datenblockgrößenfeld in dem Datenblockformat eingegrenzt.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • 1 ist ein Blockschaltbild einer ersten exemplarischen Umgebung für die vorliegende Erfindung.
  • 2 ist ein Blockschaltbild einer zweiten exemplarischen Umgebung für die vorliegende Erfindung.
  • 3 ist eine Perspektivansicht einer Mobileinrichtung.
  • 4 ist ein Blockschaltbild einer dritten exemplarischen Umgebung für die vorliegende Erfindung.
  • 5 ist ein System zum Verarbeiten von Strömungsinformation.
  • 6 ist ein Blockschaltbild eines Verzögerungsfilters.
  • 7 ist ein Blockschaltbild des Verzögerungsfilters 112, das eine Schnittstelle zu einem Ringpuffer in dem Filter zeigt;
  • 8 ist ein Diagramm, das den Ringpuffer entlang einer linearen Zeitlinie veranschaulicht.
  • 9A und 9B bilden zusammen ein Flussdiagramm für einen Schreibteil eines Synchronisationsalgorithmusses nach einer Ausführung der vorliegenden Erfindung.
  • 10 ist ein Diagramm, das das Voranschreiten einer Schwanzzeigervariablen in dem Ringpuffer veranschaulicht.
  • 11A und 11B veranschaulichen gemeinsam ein Flussdiagramm für den Leseteil des Synchronisationsalgorithmusses nach einer Ausführung der vorliegenden Erfindung.
  • 12 ist ein Diagramm, das ein Beispiel des Ringpuffers veranschaulicht, wenn ein Lesermodul ein Schreibermodul überholt hat.
  • 13 ist ein Diagramm, das ein Statusregister veranschaulicht, das für jeden Datenkanal unterhalten wird, um anzugeben, welche Benutzeroperationen in einem momentanen Status des Kanals erlaubt oder verboten sind.
  • 14 ist eine Tabelle, die Beispiele von Benutzeroperationen auflistet, die Benutzeroperationsfeldern UOP0-UOP10 in 13 entsprechen.
  • 15 ist ein Flussdiagramm eines Softwareobjekts, das von einer Anwendung als Reaktion auf eine Benutzeranforderung aufgerufen wird.
  • 16 ist ein Flussdiagramm, das Schritte veranschaulicht, die von dem Verzögerungsfilter beim Aufrechterhalten der Benutzeroperationsbits des in 13 gezeigten Statusregisters durchgeführt werden.
  • 17 ist eine bildliche Darstellung eines Datenblocks.
  • 18 ist eine bildliche Darstellung einer ersten Sequenz von Datenblöcken.
  • 19 ist eine bildliche Darstellung einer zweiten Sequenz von Datenblöcken.
  • 20 ist ein Blockschaltbild einer anderen Ausführung eines erfindungsgemäßen Systems.
  • 20A ist ein Bockschaltbild eines Beispiels eines Filtergraphen.
  • 21A bis 21D sind Blockschaltbilder, die eine Stromanalyse veranschaulichen.
  • 22 bis 23C sind Flussdiagramme, die Stromanalyse veranschaulichen.
  • 24 ist ein Flussdiagramm, das Indexierung veranschaulicht.
  • 25 ist eine Veranschaulichung eines Teils eines Datenpuffers.
  • 26 ist ein Flussdiagramm, das eine Suchen-Operation veranschaulicht.
  • AUSFÜHRLICHE BESCHREIBUNG DER VERANSCHAULICHENDEN AUSFÜHRUNGEN
  • Übersicht
  • 1 und die zugehörige Erörterung sind gedacht, eine kurze, allgemeine Beschreibung einer ersten exemplarischen Rechenumgebung zu geben, in der die Erfindung implementiert werden kann. Obwohl nicht erforderlich, wird die Erfindung wenigstens zum Teil in dem allgemeinen Kontext von prozessorausführbaren Anweisungen beschrieben, z.B. Programmmodulen, die von einem Controller, Prozessor, Personal Computer oder einer anderen Recheneinrichtung ausgeführt werden. Programmmodule enthalten gewöhnlich Routinenprogramme, Objekte, Komponenten, Datenstrukturen usw., die bestimmte Tasks durchführen oder bestimmte abstrakte Datentypen implementieren. Tasks, die von den Programmmodulen durchgeführt werden, werden unten mithlife von Blockschaltbildern und Flussdiagrammen beschrieben. In der Technik erfahrene Personen können die Beschreibung, Block schaltbilder und Flussdiagramme in prozessorausführbaren Anweisungen implementieren, die auf computerlesbare Medien geschrieben werden können. Die Fachleute werden außerdem einsehen, dass die Erfindung mit anderen Informationsgeräten, einschließlich handgehaltener Einrichtungen, mikroprozessorbasierter oder programmierbarer Verbraucherelektronik, Netzwerk-PCs, Minicomputern, Mainframe-Computern und dergleichen, praktiziert werden kann. Die Erfindung ist auch in verteilten Rechenumgebungen anwendbar, wo Tasks durch entfernte Verarbeitungseinrichtungen durchgeführt werden, die durch ein Kommunikationsnetzwerk verbunden sind. In einer verteilten Rechenumgebung können sich Programmmodule sowohl in lokalen als auch entfernten Speichereinrichtungen befinden.
  • Auf 1 verweisend enthält eine erste exemplarische Umgebung für die Erfindung eine Universal-Recheneinrichtung in der Form eines herkömmlichen Personal Computers 20, der eine Verarbeitungseinheit 21, einen Systemspeicher 22 und einen Systembus 23 enthält, der verschiedene Systemkomponenten, einschließlich des Systemspeichers, mit der Verarbeitungseinheit 21 verbindet. Der Systembus 23 kann jede von mehreren Typen von Busstrukturen, einschließlich eines Speicherbus- oder Speichercontrollers, eines Peripheriebusses und eines lokalen Busses, sein, die irdendeine einer Vielfalt von Busarchitekturen verwendet. Der Systemspeicher umfasst einen Nurlesespeicher (ROM) 24 und einen Direktzugriffsspeicher (RAM) 25. Ein Basis-Eingabe/Ausgabesystem 26 (BIOS), das die Basisroutine enthält, die hilft, Information zwischen Elementen in dem Personal Computer 20, z.B. während des Anlaufens, zu übertragen, ist im ROM 24 gespeichert. Der Personal Computer 20 umfasst des Weiteren ein Festplattenlaufwerk 27 zum Lesen von einer oder Schreiben auf eine Festplatte (nicht gezeigt), ein Magnetplattenlaufwerk 28 zum Lesen von einer oder Schreiben auf eine abnehmbare Magnetplatte 29 und ein optisches Plattenlaufwerk 30 zum Lesen von einer oder Schreiben auf eine abnehmbare optische Platte 31, z.B. ein CD-ROM oder ein anderes optisches Medium. Das Festplattenlaufwerk 27, das Magnetplattenlaufwerk 28 und das optische Plattenlaufwerk 30 sind mit dem Systembus 23 durch eine Festplattenlaufwerk-Schnittstelle 32, eine Magnetplattenlaufwerk-Schnittstelle 33 bzw. eine optische Plattenlaufwerk-Schnittstelle 34 verbunden. Die Laufwerke und das zugehörige computerlesbare Medium stellen eine nichtflüchtige Speicherung von computerlesbaren Anweisungen, Programmmodulen und anderen Daten für den Personal Computer bereit.
  • Obwohl die hierin beschriebene exemplarische Umgebung eine Festplatte, eine abnehmbare Magnetplatte 29 und eine abnehmbare optische Platte 31 einsetzt, sollten die Fachleute einsehen, dass andere Arten von computerlesbaren Medien, die für einen Computer zugäng liche Daten speichern können, z.B. Magnetkassetten, Flash-Speicherkarten, digitale Videoplatten, Bernoulli-Kassetten, Direktzugriffsspeicher (RAMs), Nurlesespeicher (ROMs) und dergleichen, ebenfalls in der exemplarischen Betriebsumgebung verwendet werden können. Ein Anzahl von Programmmodulen kann auf der Festplatte, der Magnetplatte 29, der optischen Platte 31, im ROM 24 oder RAM 25 gespeichert werden, einschließlich eines Betriebssystems 35 eines oder mehrerer Anwendungsprogramme 36, anderer Programmmodule 37 und Programmdaten 38. Ein Benutzer kann Befehle und Information über Eingabeeinrichtungen, wie z.B. eine Tastatur 40 und ein Zeigegerät (Maus) 42, in den Personal Computer 20 eingeben. Andere Eingabeeinrichtungen (nicht gezeigt) können ein Mikrophon, Joystick, Game-Pad, Satellitenschüssel, Scanner und dergleichen umfassen. Diese und andere Eingabeeinrichtungen werden an die Verarbeitungseinheit 21 oft über eine serielle Port-Schnittstelle 46, die mit dem Systembus 23 verbunden ist, angeschlossen, können aber mit anderen Schnittstellen, wie z.B. eine Sound-Karte, ein Parallel-Port, Game-Port oder ein Universal-Serial-Bus (USB), angeschlossen werden. Ein Monitor 47 oder eine andere Art von Anzeigeeinrichtung ist ebenfalls mit dem Systembus 23 über eine Schnittstelle, z.B. einen Videoadapter 48, verbunden. Zusätzlich zu dem Monitor 47 umfassen Personal Computer typischerweise andere periphere Ausgabeeinrichtungen, z.B. einen mit einer Sound-Karte 57 verbundenen Lautsprecher 49 und Drucker (nicht gezeigt).
  • Der Personal Computer 20 kann in einer vernetzten Umgebung arbeiten, die logische Verbindungen zu einem oder mehr entfernten Computern, z.B. ein entfernter Computer 49, verwendet. Der entfernte Computer 49 kann ein anderer Personal Computer, ein Server, ein Router, ein Netzwerk-PC, eine Peer-Einrichtung oder ein anderer Netzwerkknoten sein und umfasst typischerweise viele oder alle oben bezüglich des Personal Computers 20 beschriebenen Elemente, obwohl in 1 nur eine Speichereinrichtung 50 dargestellt wurde. Die in 1 gezeigten logischen Verbindungen umfassen ein lokales Netzwerk (LAN) 51 und ein Weitbereichsnetzwerk (WAN) 52. Solche Vernetzungsumgebungen sind in Büros, in unternehmensweiten Computernetzwerk-Intranetzen und dem Internet alltäglich.
  • Wenn in einer LAN-Netzwerkumgebung verwendet, ist der Personal Computer 20 über eine Netzwerk-Schnittstelle oder -Adapter 53 mit dem lokalen Netzwerk 51 verbunden. Wenn in einer WAN-Netzwerkumgebung verwendet, enthält der Personal Computer 20 typischerweise ein Modem 54 oder eine andere Einrichtung zum Herstellen von Übertragungen über das Weitbereichsnetzwerk 52, z.B. das Internet. Das Modem 54, das intern oder extern sein kann, ist mit dem Systembus 23 über die serielle Port-Schnittstelle 46 verbunden. In einer Netzwerkumgebung können bezüglich des Personal Computers 20 gezeigte Programmmodule oder Teile davon in der entfernten Speichereinrichtung gespeichert werden. Es ist einzusehen, dass die gezeigten Netzwerkverbindungen exemplarisch sind und andere Einrichtungen zum Errichten einer Übertragungsstrecke zwischen den Computern verwendet werden können.
  • Strömungsinformation kann durch den Computer 20 mittels einer Anzahl bekannter Verfahren und Technologien empfangen werden. Gewöhnlich ist eine Quelle von Strömungsinformation ein entfernter Computer, wobei der Computer 21 mit dem entfernten Computer mittels eines verdrahteten oder drahtlosen Modems verbunden ist. Diese Technik wird oft verwendet, wenn Strömungsinformation durch ein Intranet oder das Internet, typischerweise in digitaler Form, bereitgestellt wird. Digitale Strömungsinformation kann weiter Satellitensignale umfassen, die durch einen Satellitenempfänger, -schüssel oder dergleichen empfangen werden.
  • Strömungsinformation kann jedoch auch als Analogsignale ankommen. Zum Beispiel kann die Strömungsinformation auch Rundfunk- oder Fernsehsignale umfassen. In solchen Fällen enthält der Personal Computer 20 einen Radio-Tuner 60 und einen Fernseh-Tuner 62, um die Rundfunksignale zu empfangen und die Analogsignale in digitale Form zum Übertragen über den Systembus 23 umzuwandeln.
  • Man sollte verstehen, dass die vorliegende Erfindung neben dem Computer 20 in anderen Recheneinrichtungen verwendet werden kann. 2 ist ein Blockschaltbild einer Mobileinrichtung 68, die eine andere exemplarische Rechenumgebung ist. Die Mobileinrichtung 68 enthält einen Mikroprozessor 70, einen Speicher 72, Eingabe/Ausgabe-(E/A)Komponenten 74 und eine Kommunikationsschnittstelle 76, um zum Beispiel mit Computer 20 zu kommunizieren. In einer Ausführung sind die vorerwähnten Komponenten zur Kommunikation miteinander über einen geeigneten Bus 78 verbunden.
  • Der Speicher 72 ist als nichtflüchtiger elektronischer Speicher, z.B. als Direktzugriffsspeicher (RAM), mit einem Batterieunterstützungsmodul (nicht gezeigt) implementiert, sodass in dem Speicher 72 gespeicherte Information nicht verlorengeht, wenn die allgemeine Stromversorgung der Mobileinrichtung 68 ausgeschaltet wird. Ein Teil des Speichers 72 wird vorzugsweise als adressierbarer Speicher zur Programmausführung zugewiesen, während ein anderer Teil des Speichers 72 bevorzugt zur Speicherung benutzt wird, um z.B. eine Speicherung auf einem Plattenlaufwerk zu simulieren.
  • Der Speicher 72 enthält ein Betriebssystem 80, ein Anwendungsprogramm 82 sowie einen Objektspeicher 84. Im Betrieb wird das Betriebssystem 80 bevorzugt durch den Prozessor 70 von Speicher 72 ausgeführt. In einer bevorzugten Ausführung ist das Betriebssystem 80 ein "Windows CE" Betriebssystem, das von Microsoft Corporation käuflich ist. Das Betriebssystem 80 ist vorzugsweise für Mobileinrichtungen gedacht und implementiert Datenbankmerkmale, die durch die Anwendung 82 durch einen Satz von frei stehenden Anwendungsprogrammierungs-Schnittstellen und -Verfahren benutzt werden können. Die Objekte im Objektspeicher 84 werden durch die Anwendung 82 und das Betriebsystem 80 wenigstens teilweise als Reaktion auf Aufrufe an die frei stehenden Anwendungsprogrammierungs-Schnittstellen und -Verfahren aufrechterhalten.
  • Die Kommunikationsschnittstelle 76 stellt zahlreiche Einrichtungen und Technologien dar, die der Mobileinrichtung 68 erlauben, Strömungsinformation zu empfangen. Die Einrichtungen gleichen denen oben in Bezug auf Computer 20 erörterten und enthalten verdrahtete und drahtlose Modems, Satelliten-Empfänger und Runkfunk-Tuner, um einige zu nenen. Die Mobileinrichtung 68 kann auch direkt mit dem Computer 20 verbunden werden, um Daten damit auszutauschen. In solchen Fällen kann die Kommunikationsschnittstelle 76 ein Infra-rot-Transceiver oder eine serielle oder parallele Kommunikationsverbindung sein, von denen jede imstande ist, Strömungsinformation zu übertragen.
  • 3 ist eine vereinfachte bildliche Darstellung der Mobileinrichtung 68. Die Mobileinrichtung 68 kann ein Desktop-Assistent sein, der unter der Bezeichnung H/PC mit von Microsoft Corporation gelieferter Software verkauft wird. In einer Ausführung enthält die Mobileinrichtung 68 eine miniaturisierte Tastatur 83, eine Anzeige 85 und einen Griffel 86. Bei der in 3 gezeigten Ausführung ist die Anzeige 85 eine Flüssigkristallanzeige (LCD), die einen berührungsempfindlichen Anzeigeschirm in Verbindung mit dem Griffel 86 verwendet. Der Griffel 86 wird benutzt, um auf die Anzeige 85 an bestimmten Koordinaten zu drücken oder sie zu berühren, um bestimmte Benutzereingabefunktionen auszuführen. Die miniaturisierte Tastatur 83 wird bevorzugt als eine miniaturisierte alphanumerische Tastatur mit allen geeigneten und gewünschten Funktionstasten implementiert, die zum Ausführen bestimmter Benutzereingabefunktionen bereitgestellt werden. Bei anderen bekannten Ausführungen wird die Tastatur 83 weggelassen, und eine "Soft"-Tastatur wird durch den berührungsempfindlichen An zeigeschirm bereitgestellt. Bei noch anderen Ausführungen wird ein Zeichenerkennungsmodul eingesetzt, um auf dem berührungsempfindlichen Anzeigeschirm mit dem Griffel 86 geschriebene Zeichen zu erkennen.
  • 4 zeigt noch eine andere exemplarische Umgebung, in der die vorliegende Erfindung arbeiten kann. In 4 wird eine Unterhaltungvorrichtung 90 veranschaulicht, die eine Verarbeitungseinheit 21, einen Systemspeicher 22 und einen Systembus 23 enthält. Ein Festplattenlaufwerk 27 oder irgendwelche der anderen oben beschriebenen Speichereinrichtungen sind des Weiteren mit dem Systembus 23 verbunden und werden zur vorübergehenden und permanenten Speicherung von Programmanwendungen, Daten usw. benutzt. Anders als typische Desktop-Computer, wie z.B. der oben beschriebene Computer 20, kann die Unterhaltungsvorrichtung 90 eine begrenzte Eingabeeinrichtung, z.B. eine handgehaltene Fernbedienung 92, verwenden, die mit einem Empfänger 94 betrieben werden kann, der ein Infrarot-Empfänger, ein Funkempfänger oder dergleichen sein kann. In der Unterhaltungsvorrichtung 90 wird Information an den Benutzer mittels eines Monitors 47 oder einer anderen Anzeigeeinrichtung zurückgegeben, die mit dem Systembus 23 über einen Videoadapter 48 verbunden ist. Audioinformation wird ebenfalls zurückgegeben und hier mit einem Lautsprecher 49 veranschaulicht. Der Lautsprecher 49 ist mit dem Systembus 23 über eine Sound-Karte 57 verbunden, die, wenn gewünscht, mit dem Videoadapter 48 kombiniert werden kann, um eine Signaleinrichtung zu bilden. Des Weiteren sollte man verstehen, dass Audio- und Videoinformation an externe Komponenten geliefert werden könnte, z.B. Verstärker oder dergleichen, die ihrerseits mit dem Monitor 47 und Lautsprechern 49 verbunden sind.
  • Strömungsinformation wird der Unterhaltungsvorrichtung 90 über eine Kommunikationsschnittstelle 96 bereitgestellt. Die Kommunikationsschnittstelle 96 kann eine der oben in Bezug auf die zwei vorangehenden Umgebungen beschriebenen Einrichtungen sein.
  • Verzögerungsfilter
  • 5 ist ein allgemeines Blockschaltbild, das ein System 110 zur Verarbeitung von Strömungsinformation veranschaulicht. Das System 110 enthält ein Verzögerungsfilter 112 zum Zwischenspeichern von Strömungsinformation, die von einer Strömungsinformationsquelle 114 empfangen wird. Das Verzögerungsfilter 112 ist mit einer Wiedergabeeinrichtung oder -einrichtungen 116 verbunden, um Strömungsinformation auf Verlangen des Benutzers wiederzugeben. 5 zeigt auch einen Coder 118 und einen Decoder 120. Obwohl nicht erfor derlich, können der Coder 118 und der Decoder 120 die Systemleistung verbessern, wobei der Coder 118 Strömungsinformation von der Quelle 114 empfängt und die Strömungsinformation komprimiert, bevor sie an das Verzögerungsfilter 112 übergeben und dort gespeichert wird. Der Decoder 120 empfängt die in dem Verzögerungsfilter 112 im komprimierten Format zwischengespeicherte Strömungsinformation und dekomprimiert die Strömungsinformation, bevor sie an die Wiedergabeeinrichtung 116 übergeben wird.
  • An dieser Stelle sollte zur Kenntnis genommen werden, dass das System 110 in jeder der oben beschriebenen Rechenumgebungen oder in ähnlichen Rechenumgebungen betrieben werden kann. Die Fachleute werden einsehen, dass das Verzögerungsfilter 112, die Wiedergabeeinrichtung 116, der Coder 118 und der Decoder 120 in Hardware, Software oder in Kombinationen davon implementiert werden können. In einer Ausführung wird z.B. das Verzögerungsfilter 112 in dem Betriebssystem verkörpert. Höherstufige Anwendungsprogramme oder andere Teile des Betriebssystems können unter Verwendung von Anwendungsprogramm-Schnittstellen (APIs) auf Funktionen des Verzögerungsfilters 112 zugreifen, wie in der Technik bekannt ist.
  • Im Betrieb liefert eine Strömungsinformationsquelle 114 einen Informationsstrom an das Verzögerungsfilter 112 (optional über Coder 118). Im Allgemeinen umfasst die Strömungsinformation digitale Daten, die einen oder mehr Kanäle von Inhaltsinformation darstellen. Zum Beispiel kann die Strömungsinformationsquelle 114 ein Intranet oder das Internet, das durch die oben beschriebene Kommunikationsschnittstelle verfügbar ist, umfassen. Desgleichen kann die Strömungsinformationsquelle 114 einen analogen oder digitalen Fernseh-Tuner umfassen, wobei getrennte Audio-, Video- und Daten-(d.h. 'closed captioning')Informationsströme einen einzelnen Kanal umfassen. Andere Quellen von Strömungsinformation sind Audio-Tuner, Satelliten-Empfänger und dergleichen, sind aber darauf nicht begrenzt.
  • In der veranschaulichten Ausführung empfängt der Coder 118 die Strömungsinformation und codiert oder komprimiert die Strömungsinformation in ein bekanntes Format, z.B. "AVI", "MOV" (AppleR QuickTimeR) und "WAV", obwohl, wenn benutzt, die vorliegenden Erfindung nicht auf irgendein bestimmtes Codierformat begrenzt ist.
  • Wie unten erörtert, enthält das Verzögerungsfilter 112 im Allgemeinen ein Schreibermodul 122, einen Ringpuffer 124 und ein oder mehr Lesermodule 126. Das Schreibermodul 122 empfängt die von der Strömungsinformationsquelle 114 bereitgestellte Strömungsinforma tion und schreibt die Strömungsinformation in den Ringpuffer 124. Der Ringpuffer 124 kann eine der oben beschriebenen Speichereinrichtungen, z.B. Festplatte 27 oder einen RAM-Speicher, umfassen. Das Lesermodul 126 greift auf den Ringpuffer 124 zu, um die Strömungsinformation zurückzugewinnen, wenn die Strömungsinformation wiederzugeben ist. Wenn die im Ringpuffer 124 gespeicherte Strömungsinformation codiert oder komprimiert ist, decodiert oder dekomprimiert der Decoder 120 die Strömungsinformation, die dann an eine Wiedergabeeinrichtung 116 übergeben wird.
  • 6 ist eine ausführlichere bildliche Darstellung des Verzögerungsfilters 112. In dieser gezeigten Ausführung umfasst die Strömungsinformation ein Fernsehsignal oder -kanal, der Audio-, Video- und Daten-(closed captioning)Ströme enthält. Die Strömungsinformation wird an einen Stromanalysator 130 geliefert, der die ankommenden Ströme analysiert und solche Information als Synchronisationspunkte bereitstellt, die in jedem der Ströme vorhanden sein können. Synchronisationspunkte werden beim Wiedergeben einiger Arten von Strömungsinformation benutzt und werden unten in Einzelnen erörtert.
  • Strömungsinformation und Synchronisationspunkt-Information wird dem Schreibermodul 122 zugeführt. In einer Ausführung, wie gezeigt, umfasst das Schreibermodul 122 einen MUX-Schreiber, der Multistrom-Strömungsinformation zur Speicherung in dem Ringpuffer 124 empfängt. Wie oben angedeutet, werden ein oder mehr Lesermodule (hier als 1261 , 1262 und 1263 bezeichnet) bereitgestellt, um die Strömungsinformation aus dem Ringpuffer 124 zur Wiedergabe zu lesen. Das Schreibermodul 122 speichert Synchronisationsinformation in einem Index 132. Die Lesermodule 126 können auf den Index 132 zugreifen, um einen bestimmten Teil der Strömungsinformation aufzufinden und die Strömungsinformation richtig wiederzugeben. Die Funktion des Schreibermoduls 122, des Ringpuffers 124, der Lesermodule 126 und des Indexes 132 werden unten im Detail erörtert.
  • In der gezeigten Ausführung werden zwei getrennte Abspiel-Lesermodule 1261 und 1262 mit Ausgängen gezeigt, die Strömungsinformation an getrennte Video-, Audio- und Datendecoder 120 und Wiedergabeeinrichtungen 116 liefern. Dies zeigt allgemein, dass getrennte Lesermodule 126 Strömungsinformation aus dem Ringpuffer 124 an verschiedenen Punkten in dem Ringpuffer 124 lesen können, und stellt daher getrennte Individuen dar, die auf die darin gespeicherten Daten zugreifen. Außerdem können andere Lesermodule 126, wie z.B. bei 136 angedeutet, implementiert werden, um die Strömungsinformation zum späteren Betrachten im Ringpuffer 124 zu archivieren und zu speichern. Im Allgemeinen liefert in dem Archivierungssystem 136 das Lesermodul 1263 Strömungsinformation an einen MUX-For matierer 138, der wiederum die Strömungsinformation an ein Schreibermodul 140 zur Speicherung in einer der oben angegebenen Speichereinrichtungen, z.B. Festplatte 27, liefert.
  • Ringpuffer
  • Wieder auf Ringpuffer 124 verweisend hat der Ringpuffer 124 "schwebende" Anfangs- und Endpunkte, die als ein logischer "Kopf" 150 und "Schwanz" 152 bezeichnet werden. Der Kopf 150 entspricht dem logischen Kopf von gültigen Daten im Ringpuffer 124, und der Schwanz 152 entspricht dem logischen Schwanz von gültigen Daten im Ringpuffer 124. Das Schreibermodul 122 schreibt immer an den Kopf von Puffer 124, der sich in der Richtung von Pfeil 154 zirkular durch den Puffer bewegt. Der Puffer 124 hat daher immter eine feste, maximale Zeitmenge von Daten, die zum Lesen verfügbar ist. Wenn z.B. Multimedia-(d.h. Audio und Video)Inhalt zeitverschoben wird, empfängt das Schreibermodul 122 die Strömungs-Multimedia-Information und speichert die Information im Puffer 124. Der Benutzer betrachtet den gespeicherten Multimedia-Inhalt durch eines der Lesermodule 126. Die zirkulare Struktur des Puffers 124 erlaubt, dass ein Teil der Strömungsinformation dem Benutzer zur "Sofortwiedergabe" oder "Pause" bei Bedarf zur Verfügung steht, ohne dass dem Puffer erlaubt wird, sich mit "zeitverschobenen" Daten zu füllen. Der Ringpuffer 124 kann in einem flüchtigen oder nicht flüchtigen Speicher implementiert werden, z.B. als Direktzugriffsspeicher (RAM), Festplatte, Floppydisk oder optische Platte. In einer Ausführung wird der Ringpuffer 124 in dem Festplattenlaufwerk 27 implementiert.
  • 7 ist ein Blockschaltbild eines Verzögerungsfilters 112, das eine Schnittstelle zum Ringpuffer 124 zeigt. Eine Puffer-E/A-Schicht 200 verbindet den Ringpuffer 124 und die Klienten des Puffers, die das Schreibermodul 122 und die Lesermodule 126 (bezeichnet 1261 -126N , wo N eine Ganzzahlvariable größer oder gleich 1 ist) umfassen. Die Puffer-E/A-Schicht 200 implementiert die Zirkularität des Puffers 124 und synchronisiert das Schreibermul 122 mit den Lesermodulen 1261 -126N . Die Puffer-E/A-Schicht 200 implementiert die Zirkularität durch Übersetzen zwischen logischen Adressen, die an oberen Schnittstellen 204-207 benutzt werden, um logische Positionen im Puffer 124 zu identifizieren, und physikalischen (überlagernden) Adressen, die an der unteren Schnittstelle 208 zum Identifizieren bestimmter physikalischer Adressen im Puffer 124 benutzt werden. Die logischen Adressen nehmen mit der Zeit immer zu (oder ab) und überlagern sich niemals. Die logischen Adressen können, wenn gewünscht, periodisch zurückgesetzt werden. Die physikalischen Adressen überlagern sich (d.h. überlagern sich von der höchsten Adresse des Puffers zur niedrigsten Adresse des Puffers) bei einer durch die Größe des Ringpuffers bestimmten Häufigkeit.
  • Wenn jeder aufeinanderfolgende Block der Strömungsinformation von dem Schreibermodul 122 empfangen wird, wird der Block mit einer betreffenden logischen Adresse oder einem Bereich von logischen Adressen verbunden, was mit jedem folgenden Block zunimmt. Die Puffer-E/E-Schicht 200 übersetzt die logischen Adressen in entsprechende physikalische Adressen, die benutzt werden, um auf den Ringpuffer 124 zuzugreifen. In einer Ausführung übersetzt die Puffer-E/A-Schicht 200 die logischen Adressen in physikalische Adressen als eine Funktion der logischen Adresse Modulo Puffergröße (d.h. die Anzahl von Speicherstellen im Ringpuffer 124). Die Puffer-E/A-Schicht 200 kann z.B. in einem Betriebssystem implementiert werden.
  • Schreib/Lese-Synchronisation
  • Da das Schreibermodul 122 und die Lesermodule 1261 -126N unabhängig voneinander und mit verschiedenen Datenraten arbeiten können, synchronisiert die Pufter-E/A-Schicht das Schreibermodul 122 und die Lesermodule 1261 -126N , um eine vorbestimmte zeitliche Reihenfolge zwischen dem Schreiben und dem Lesen aufrechtzuerhalten. In einer Ausführung verhindert die Puffer-E/A-Schicht 200, dass einer der Leser 1261 -126N Daten liest, die logisch noch nicht vorhanden sind, und verhindert, dass das Schreibermodul 122 Daten überschreibt, die im Begriff sind, von einem oder mehreren der Lesermodule 1261 -126N gelesen zu werden. Im Ringpuffer 124 entspricht eine gegebene physikalische Position mehrfachen logischen Positionen. Ohne Synchronisation kann ein Lesermodul, das dem Lesermodul 122 um einen Abstand, der nahe der Puffergröße ist, voreilt, gerade aus dem gleichen physikalischen Bereich lesen, in den das Schreibermodul 122 gerade schreibt. Die Puffer-E/A-Schicht 200 erlaubt den Lesermodulen 1261 -126N , dem Schreibermodul 122 so nahe wie möglich zu folgen, um die Latenz zu minimieren.
  • Die Puffer-E/A-Schicht 200 implementiert einen Synchronisations-Algorithmus für das Schreibermodul 122 und die Lesermodule 1261 -126N . Jedes Mal, wenn das Schreibermodul 122 Daten in die Puffer-E/A-Schicht 200 zu übergeben wünscht, ruft seine entsprechende Anwendung den Synchronisations-Algorithmus auf. Desgleichen, jedes Mal, wenn eines der Lesermodule 1261 -126N Daten aus der Puffer-E/A-Schicht 200 zu lesen wünscht, ruft seine entsprechende Anwendung den Synchronisations-Algorithmus auf. Der Synchronisations-Algorithmus kann, wie gewünscht, in Hardware, Software oder einer Kombination von beiden implementiert werden.
  • Der Synchronisations-Algorithmus benutzt "Blockierung", um (1) ein Lesermodul 1261 -126N zu sperren, das versucht, Daten zu lesen, die noch nicht geschrieben wurden, und/oder (2) das Schreibermodul 122 zu sperren, wenn es versucht, in einen Bereich des Ringpuffers 124 zu schreiben, aus dem eines der Lesermodule 1261 -126N gerade liest. In beiden Fällen wird eine Komponente gesperrt, bis eine andere Komponente die zum Beseitigen der Anstoß erregenden Situation erforderliche Operation vollendet hat. Wenn z.B. das Schreibermodul 122 gesperrt wird, bleibt es gesperrt, bis alle Lesermodule 1261 -126N , die gerade aus dem zu schreibenden Bereich lesen, ihr Lesen vollendet haben. Wenn ein Lesermodul gesperrt wird, bleibt es gesperrt, bis das Schreibermodul 122 alle von diesem Lesermodul verlangten Daten geschrieben hat.
  • Der Synchronisatians-Algorithmus benutzt eine Vielzahl von gemeinsamen Variablen. Jeder Klient hat seinen eigenen Satz von Variablen, der mit anderen Klienten gemeinsam verwendet wird. In 8 ist ein Ringpuffer 124 längs einer linearen Zeitlinie von null bis unendlich angeordnet. Der Synchronisations-Algorithmus unterhält einen "Schwanzzeiger" 230, der eine Ganzzahl-Variable ist, die den logischen Schwanz von gültigen Daten im Ringpuffer 124 anzeigt. Ein "Kopfzeiger" 232 ist eine Ganzzahl-Variable, die den logischen Kopf von gültigen Daten im Ringpuffer 124 anzeigt. Damit eine Leseoperation erfolgreich ist, muss die logische Leseposition im Ringpuffer 124 größer oder gleich dem Schwanzzeiger 230 und kleiner oder gleich dem Kopfzeiger 232 sein. Da der Puffer 124 zirkular ist, ist die logische Position des Schwanzzeigers 230 der logischen Position des Kopfzeigers 232 auch logisch "voraus".
  • Wenn das Schreibermodul 122 einen Schreibbefehl ausgibt, spezifiziert sie einen im Puffer 124 zu schreibenden Bereich, beginnend bei der momentanen Schreibposition 234. Eine "Schreiber-Gesperrt-Auf"-Ganzzahl-Variable 236 wird benutzt, um die logische Position, die dem Ende der zu schreibenden Daten entspricht, zu identifizieren, wenn der ganze oder ein Teil des zu schreibenden Bereichs von einem oder mehreren der Lesermodule 1261 -126N gesperrt wird. Die Schreiber-Gesperrt-Auf-Variable wird gesetzt, wenn eines der Lesermodule 1261 -126N momentan aus diesem Bereich liest. Zum Beispiel kann ein Lesermodul gegenwärtig von einer logischen Position 235 lesen, die zwischen Positionen 234 und 236 liegt. Ein "Null"-Wert für die Schreiber-Gesperrt-Auf-Variable zeigt an, dass das Schreibermodul 122 momentan nicht von einem der Lesermodule 1261 -126N gesperrt wird.
  • Eine Ganzzahl-Variable "Momentan-Lesen-Von" wird für jedes der Lesermodule 1261 -126N unterhalten. Die Variable Momentan-Lesen-Von wird benutzt, um anzuzeigen, dass das Le sermodul gerade ein Lesen durchführt, das an dieser logischen Position in dem Ringpuffer 124 beginnt. Zum Beispiel liest in 8 ein Lesermodul gerade von der logischen Position 235 im Ringpuffer 124. Die Variable Momentan-Lesen-Von wird benutzt, um zu verhindern, dass das Schreibermodul 122 die Daten an der logischen Position 235 überschreibt, während das Lesermodul gerade von der logischen Position 235 liest. Wenn ein bestimmtes Lesermodul 1261 -126N momentan nicht aus dem Ringpuffer 124 liest, wird seine entsprechende Momentan-Lesen-Von-Variable auf unendlich gesetzt.
  • Eine Variable "Schreiber-Ungesperrt-Ereignis" wird benutzt, um das Schreibermodul 122 "aufzuwecken", wenn es mit seinem gewünschten Schreibbefehl fortfahren kann. Zum Beispiel wird die Schreiber-Ungesperrt-Ereignis-Variable auf einen aktiven Status gesetzt, wenn das Schreibermodul 122 nicht gesperrt ist, und wird auf einen inaktiven Status zurückgesetzt, wenn das Schreibermodul 122 gesperrt wird. Das Schreiber-Ungesperrt-Ereignis kann als ein WindowsR-Ereignis (ein "Win32"-Ereignis) oder durch jeden anderen ähnlichen Synchronisations-Mechanismus implementiert werden, der den Fachleuten in der Technik vertraut ist.
  • Eine Variable "Leser-Entsperr-Ereignis" wird für jedes Lesermodul 1261 -126N benutzt, um das Lesermodul "aufzuwecken", wenn die Daten, die es anfordert, vorhanden sind. Zum Beispiel wird die Variable Leser-Entsperr-Ereignis auf einen aktiven Status gesetzt, wenn das entsprechende Lesermodul 1261 -126N nicht gesperrt ist, und wird auf einen inaktiven Status zurückgesetzt, wenn das entsprechende Lesermodul 1261 -126N gesperrt ist.
  • Eine Variable "Kritischer-Abschnitt" wird benutzt, um den Zugriff auf jede der obigen gemeinsamen Variablen zu schützen. Zum Beispiel kann ein "Win32" Kritischer Abschnitt oder irgendein anderer ähnlicher Synchronisationsmechanismus, z.B. ein gegenseitiges Ausschließungs-"Mutex"-Objekt, benutzt werden, wie den Fachleuten in der Technik bekannt ist.
  • 9A, 9B, 11A und 11B bilden gemeinsam ein Flussdiagramm für den Synchronisations-Algorithmus nach einem Beispiel der vorliegenden Erfindung. Die während eines Schreibens durchgeführten Schritte werden in 9A gezeigt und sind mit 300-317 bezeichnet. Wenn in Schritt 300 die Anwendung, die das Schreibermodul 122 treibt, Daten an die Puffer-E/A-Schicht 200 zu übergeben wünscht, ruft die Anwendung einen Algorithmus 290 auf. In Schritt 301 sperrt der Algoritmus 290 den kritischen Abschnitt, um den Zugriff auf die in den Schritten 302-305 benutzten Variablen zu schützen. In Schritt 302 rückt der Algorithmus 290 den "Schwanzzeiger" zu der logischen Position im Ringpuffer 124 vor, die dem Ende des Schreibbefehls entspricht. Diese logische Position wird von der Datenmenge abhängen, die vom Schreibermodul 122 geschrieben wird. Die Datenlänge kann von einem Schreibbefehl oder Datenblock zum nächsten variieren, und die Daten können beliebige Datenformate haben, die auch von einem Schreibbefehl oder Datenblock zum nächsten variieren können.
  • 10 ist ein Diagramm, das das Vorrücken des Schwanzzeigers im Ringpuffer 124 veranschaulicht. Der Schwanzzeiger 250 wird von der logischen Position 260 zu der logischen Position 262 vorgerückt. Das Vorrücken des Schwanzzeigers 250 macht sofort den zu schreibenden Bereich (hinter dem vorgerückten Schwanzzeiger 250) für künftiges Lesen ungültig, auch wenn das Schreibermodul 122 warten muss, bevor es tatsächlich das Schreiben der Daten beginnen kann. Als Folge können, sobald das Schreibermodul 122 die Puffer-E/A-Schicht 200 durch Aufrufen des Schreiberalgorithmusses informiert hat, dass es in einen Bereich des Ringpuffers 124 zu schreiben wünscht, keine neuen Lesermodule das Lesen aus diesem Bereich beginnen. Dies minimiert die Zeit, während der das Schreibermodul 122 auf die Lesermodule 1261 -126N warten muss, und verhindert, dass der Schreiber andauernd gesperrt ist.
  • Wieder auf 9A verweisend stellt des Synchronisations-Algorithmus 290 in Schritt 303 fest, ob eine der "Momentan-Lesen-Von"-Variablen der Leser 1261 -126N kleiner als (d.h. hinter) die "Schwanzvariable" ist. In 10 kann z.B. ein Lesermodul eine Momentan-Lesen-Von-Variable haben, die auf eine logische Position 272 im Ringpuffer 124 zeigt, die kleiner als die logische Position 272 des vorgerückten Schwanzzeigers 250 ist. Wenn dies der Fall ist, sperrt oder verzögert der Synchronisations-Algorithmus 290 das Schreibermodul 122, sodass das in Konflikt stehende Lesermodul "aus dem Weg gehen kann". Wenn keine der Momentan-Lesen-Von-Variablen der Lesermodule kleiner als die vorgerückte Schwanzzeiger-Variable ist, geht der Synchronisations-Algorithmus 290 direkt zu Schritt 311 (9B), um die Daten in den Ringpuffer 124 zu schreiben.
  • In Schritt 304 setzt der Algorithmus 290 die "Schreiber-Gesperrt-Auf"-Variable auf den Wert der "Schwanzzeiger"-Variablen 250. Dieser gibt die größte logische Position im Ringpuffer 124 an, die die Lesermodule 1261 -126N verlassen haben müssen, bevor das Schreibermodul 122 die Daten schreiben kann. Der Algorithmus 290 sperrt dann das Schreibermodul 122 durch Rücksetzten des "Schreiber-Entsperr"-Ereignisses auf den inaktiven Status in Schritt 305. Da das Schreibermodul 122 gesperrt ist, werden in Schritt 306 die Kritischen Abschnitte entsperrt. In Schritt 307 wartet der Algorithmus 290 darauf, dass die "Schreiber-Entsperr"-Ereignis-Variable durch den Synchronisations-Algorithmus für den in Konflikt stehenden Leser, der auf den zu schreibenden Bereich zugreift, aktiviert wird. Wenn das in Konflikt stehende Lesermodul das "Schreiber-Entsperr"-Ereignis aktiviert, sperrt der Algorithmus 290 den Kritischen Abschnitt in Schritt 308 und setzt dann in Schritt 309 die "Schreiber-Gesperrt-Auf"-Variable auf null zurück. In Schritt 310 entsperrt der Algorithmus 290 den Kritischen Abschnitt wieder und geht zu Schritt 311 (gezeigt in 9B).
  • In Schritt 311 wandelt die Puffer-E/A-Schicht 200 die logische Startadresse in eine zirkulare oder physikalische Adresse um und schreibt die Daten in den Ringpuffer 124, beginnend bei dieser physikalischen Adresse. Sobald die Daten geschrieben sind, sperrt der Algorithmus 290 den Kritischen Abschnitt für die in Schritten 313-315 benutzten Variablen und rückt die "Kopfzeiger"-Variable zu der logischen Position im Ringpuffer 124 vor, die dem Ende der von dem Schreibermodul 122 geschriebenen Daten entspricht. In dem in 10 gezeigten Beispiel wird der Kopfzeiger 274 von Position 276 zu Position 278 (die auch als "hinter" dem vorgerückten Schwanzzeiger 250 liegend angesehen werden kann) vorgerückt. Das Vorrücken des Kopfzeigers 274 validiert die neu geschriebenen Daten zwischen dem Kopfzeiger 274 und dem Schwanzzeiger 250.
  • In Schritt 314 stellt der Algorithmus 290 fest, ob eine der "Leser-Gesperrt-Auf"-Variablen der Lesermudule 1261 -126N kleiner als die vorgerückte "Kopfzeiger"-Variable 274 ist. Wenn nicht, hat keines der Lesermodule 1261 -126N auf die von dem Schreibermodul 122 geschriebenen Daten gewartet, und der Algorithmus 290 geht zu Schritt 316. Wenn ja, hatten ein oder mehrere der Lasermodule 1261 -126N auf das Schreibermodul 122 gewartet, das nun die gewünschten logischen Positionen validiert hat. In Schritt 315 setzt der Algorithmus 290 alle solchen "Leser-Entsperr"-Variablen, um das entsprechende Lesermodul zu entsperren.
  • In dem in 10 gezeigten Beispiel kann ein Lesermodul gerade warten, um Daten an der logischen Position 280 zu lesen, die noch nicht verfügbar war, als der Kopfzeiger 274 auf die logische Position 276 zeigte. Dieses Lesermodul würde eine "Leser-Gesperrt-Auf"-Variable gehabt haben, die auf die logische Position 280 zeigt, wie durch Pfeil 282 gezeigt. Nun, da die "Kopfzeiger"-Variable 274 auf die logische Position 278 zeigt, die vor der logischen Position 280 liegt, stehen die Daten in Position 280 zum Lesen zur Verfügung, und der Algorithmus 290 setzt die "Leser-Entsperr"-Ereignis-Variable für dieses Lesermodul auf den ak tiven Status, um dadurch das Lesermodul zu entsperren.
  • Wieder auf 9B verweisend werden in Schritt 316 die entsprechenden Kritischen Abschnitte entsperrt, und der Algorithmus endet in Schritt 317.
  • 11A und 11B veranschaulichen zusammen einen Leseteil des Synchronisations-Algorithmusses 290, der die Schritte 351-372 umfasst. Wenn eines der Lesermodule 1261 -126N Daten aus dem Ringpuffer 124 zu lesen wünscht, ruft dieses Lesermodul den Algorithmus 290 in der Puffer-E/A-Schicht 200 in Schritt 351 auf. In Schritt 352 sperrt der Algorithmus 290 den Kritischen Abschnitt, um die in Schritten 353-355 benutzten Variablen zu schützen. In Schritt 353 stellt der Algorithmus 290 fest, ob sich die zu lesende Menge von Daten bis zu einer logischen Position im Ringpuffer 124 erstreckt, die jenseits der logischen Position des "Kopfzeigers" liegt, sodass ein Teil der gewünschten Daten noch nicht gültig ist. Wenn nicht, geht der Algorithmus direkt zu Schritt 360.
  • 12 ist ein Diagramm, das ein Beispiel des Ringpuffers 124 veranschaulicht, wenn sich die verlangten Daten über den Kopfzeiger hinaus erstrecken. Der Ringpuffer 124 hat einen Schwanzzeiger 330 an einer logischen Position 332 und einen Kopfzeiger 334 an einer logischen Position 336. Wenn das Lesermodul Daten verlangt, die bei der logischen Position 337 beginnen und sich bis zur logischen Position 338 erstrecken, die jenseits der logischen Position 336 des Kopfzeigers 334 liegt, dann setzt der Algorithmus 350 die Variable "Leser-Ist-Gesperrt-Auf" für dieses Lesermodul auf die logische Position, die dem Ende der verlangten Lesedaten entspricht (z.B. logische Position 338), wie durch Pfleil 340 gezeigt. Wieder auf 11A verweisend setzt in Schritt 355 der Algorithmus 350 das "Leser-Entsperr"-Ereignis-Variable zurück, um das entsprechende Lesermodul zu sperren. Da das Lesermodul gesperrt ist, entsperrt in Schritt 356 der Algorithmus 350 den entsprechenden Kritischen Bereich. In Schritt 357 wartet der Algorithmus 350 darauf, dass die "Leser-Entsperr"-Variable für diesen Leser gesetzt wird (in Schritt 315 in 9B). Sobald die "Leser-Entsperr"-Variable gesetzt ist. wird das entsprechende Lesermodul entsperrt, und in Schritt 358 wird der Kritische Bereicht gesperrt. Die "Leser-Gesperrt-Auf"-Variable für diesen Leser wird dann in Schritt 359 auf unendlich gesetzt, und der Algorithmus 350 geht zu Schritt 360.
  • In Schritt 360 stellt der Algorithmus 350 fest, ob die logische Position, die dem Anfang der verlangten Daten entspricht, vor der logischen Position der "Schwanzzeiger"-Variablen liegt. Wenn ja, sind die verlangten Daten ungültig, da sie bereits durch das Schreibermodul 122 überschrieben wurden. In diesem Fall entsperrt in Schritt 361 der Algorithmus 350 den Kritischen Abschnitt und verfehlt in Schritt 362 die verlangte Leseoperation. Dieser Fehler kann an das entsprechende Lesermodul durch eine Vielfalt von Mechanismen, z.B. eine Statusvariable, übergeben werden.
  • Wenn die verlangten Daten bei einer logischen Position beginnen, die nicht vor der "Schwanzzeiger"-Variablen liegt, geht der Algorithmus 350 zu Schritt 363 (in 11B). In Schritt 363 setzt der Algorithmus 350 die "Momentan-Lesen-Von"-Variable des Lesers auf die logische Position am Anfang der verlangten Daten. In Schritt 364 wird der Kritische Abschnitt entsperrt, und die logische Anfangsadresse wird in eine zirkulare oder physikalische Adresse für den Ringpuffer 124 umgewandelt (7). In Schritt 365 liest die Puffer-E/A-Schicht 200 die verlangte Menge an Daten, beginnend bei der umgewandelten logischen Adresse, und liefert in Schritt 365 die Daten an das entsprechende Lesermodul. In Schritt 366 sperrt der Algorithmus 350 den Kritischen Abschnitt. In Schritt 367 wird die "Momentan-Lesen-Von"-Variable für den Leser auf unendlich zurückgesetzt, da die Leseoperation vollendet wurde.
  • In Schritt 368 stellt der Algorithmus 350 fest, ob die "Schreiber-Gesperrt-Auf"-Variable auf eine logische Position im Ringpuffer 124 zeigt, die größer als die Leseposition ist. Die Leseposition ist die logische Position im Ringpuffer 124, die dem Anfang der zu lesenden Daten entspricht. Wenn die "Schreiber-Gesperrt-Auf"-Variable nicht größer als diese logische Position ist, dann hat dieses Lesermodul das Schreibermodul 122 nicht blockiert. Der Algorithmus 350 entsperrt dann in Schritt 369 den Kritischen Abschnitt und vollendet in Schritt 370 seine Funktion.
  • Wenn die "Schreiber-Gesperrt-Auf"-Variable größer als diese Position ist, hat dieses Lesermodul das Schreibermodul 122 blockiert, und der Algorithmus 350 geht zu Schritt 371, um festzustellen, ob irgendein anderes Lesermodul das Schreibermodul 122 blockiert. Wenn nicht, setzt der Algorithmus 350 in Schritt 372 die "Schreiber-Entsperr"-Ereignis-Variable, um das Schreibermodul 122 zu entsperren. Wenn es andere Lesermodule gibt, die das Schreibermodul 122 blockieren, geht der Algorithmus 350 zu Schritt 369, ohne die "Schreiber-Entsperr"-Ereignis-Variable zu setzen.
  • Der in 9 und 11 gezeigte Algorithmus kann in alternativen Ausführungen in vielfältiger Weise modifiziert werden. Zum Beispiel kann es nicht erwünscht sein, das Schreibermodul 122 zu sperren. Wenn die dem Schreibermodul 122 bereitgestellte Strömungsinformation verlorengehen kann, wenn das Schreibermodul 122 um eine wesentliche Zeitdauer verzögert wird, z.B., wenn das Schreibermodul 122 mit einem Fernseh-Tuner verbunden ist, wäre es nicht wünschenswert, das Schreibermodul 122 zu verzögern. In diesen Ausführungen wird der Algorithmus in 9A und 9B modifiziert, um die Schritte 303-310 zu entfernen, die zum Verzögern des Schreibermoduls 122 dienen. Der Algorithmus 290 geht von Schritt 302 direkt zu Schritt 311. Ähnlich wird der Algorithmus 290 in 11A und 11B modifiziert, um die Schritte 366-369, 371 und 372 zu entfernen, die zum selektiven Entsperren des Schreibermoduls 122 dienen.
  • Des Weiteren kann der Algorithmus 290 modifiziert werden, um die Schritte 360-362 (Validieren der Leseoperation) entweder bevor oder nachdem das Lesen in Schritt 365 durchgeführt ist, durchzuführen, oder sowohl als auch. Validieren der Leseoperation vor der tatsächlichen Leseoperation vermeidet ein verschwenderisches Lesen. Wenn gewünscht, können die Schritte 360-362 jedoch nach Schritt 366 durchgeführt werden. Die Schritte 360-362 können ebenfalls sowohl vor als auch nach dem Leseschritt 365 durchgeführt werden.
  • Der in 9 und 11 gezeigte Synchronisations-Algorithmus benötigt keinen Ringpuffer wie der in 6 gezeigte. Der Synchronisations-Algorithmus kann mit kleineren Modifikationen auch in einen linearen Puffer benutzt werden, der sowohl logische als auch physikalische Adressen besitzt, die sich bei einer auf der Größe des Puffers basierenden Frequenz überlagern. Der Ringpuffer erlaubt jedoch, dass ein Lesermodul in Bezug auf das Schreibermodul zeitverschoben ist, sodass ein Teil der Strömungsinformation dem Benutzer auf Verlangen zur "Sofort-Wiedergabe" zur Verfügung steht. Ein Ringpuffer erlaubt dem Benutzer, ein Programm pausieren zu lassen, erlaubt dem Benutzer aber nicht, den Puffer versehentlich mit zeitverschobenen Daten aufzufüllen. Das Schreibermodul schreibt immer an den "Anfang" des Puffers, der der Punkt ist, der sich kreisförmig durch den Puffer bewegt.
  • Der in 9 und 11 gezeigte Synchronisations-Algorithmus erlaubt auch dem Benutzer, die im Puffer gespeicherten Daten schnell vorwärts zu durchlaufen. Wenn der Benutzer ein Lesermodul hat pausieren lassen, sodass das Schreibermodul diesem Leser erheblich voraus ist, hat der Benutzer oder die Anwendung die Möglichkeit, das Lesermodul schnell vorwärts laufen zu lassen, um zu dem Schreibermodul aufzuschließen. Der Synchronisations-Algorithmus stoppt jedoch den schnellen Vorlauf, wenn das Lesermodul das Schreibermodul einholt. Das Lesermodul kann z.B. ein "Direktzeigen"-Ereignis (oder ein anderer geeigneter Er eignis-Mechanismus, der der Softwareumgebung zur Verfügung steht) einleiten, wann immer das Lesermodul durch das Schreibermodul gesperrt wird. Die Anwendung erkennt dieses Ereignis und schaltet den Zustand des Lesermoduls vom schnellen Vorlauf in den normalen Abspielmodus. Wenn das Schreibermodul das Lesermodul einholt, kann eine Verfälschung durch das Schreibermodul vermieden werden, indem (1) das Lesermodul gesperrt wird, bis die Daten vorhanden sind, (2) das Schreibermodul gesperrt wird, bis der Leser aus dem Weg ist, oder (3) der Leser nach vorne bewegt wird, indem eine Pause des Lesers abgebrochen oder der Leser schnell vorwärts bewegt wird.
  • Benutzeroperation-Erlaubnisprüfung
  • In einer Ausführung enthält das Verzögerungsfilter 112 (gezeigt in 6) weiter einen Benutzeroperation-Erlaubnisprüfungs- und -Mitteilungsmechanismus, der verträgliche Betriebszustände in dem Filter aufrechterhält. 13 ist ein Diagramm, das ein Statusregister 420 veranschaulicht, das von dem Verzögerungsfilter 112 für jeden Datenstrom, oder Kanal, durch das Filter unterhalten wird. Das Verzögerungsfilter 112 kann das Register 420 z.B. in einem RAM oder einem anderen Speichermedium unterhalten. Das Statusregister 420 enthält eine Vielzahl von Feldern, wobei jedes Feld ein oder mehrere Bits hat. In dem in 13 gezeigten Beispiel entsprechen die Bits 0-10 des Statusregisters 420 jeweils Benutzeroperationsfeldern UOP1-UOP10. Die Bits 11-27 entsprechen reservierten Feldern. Die Bits 28-31 entsprechen einem Kanal-Streamer-ID-Feld, das den einzelnen Datenstrom durch das Schreibermodul 122 und die Lesermodule 1261 -126N identifiziert, mit denen das Statusregister 410 verbunden ist. Jedes Benutzeroperationsfeld UOP1-OUP10 hat einen Binärwert, der anzeigt, ob die entsprechende Benutzeroperation erlaubt oder verboten ist. Zum Beispiel würde eine binäre "eins" in dem entsprechenden Feld anzeigen, dass diese Benutzeroperation erlaubt ist. Eine binäre "null" in einem Benutzeroperationsfeld würde anzeigen, dass diese Benutzeroperation verboten ist. 14 ist eine Tabelle, die Beispiele von Benutzeroperationen auflistet, die Benutzeroperationsfeldern UOP0-UOP10 entsprechen. Das Verzögerungsfilter 112 unterhält die UOP-Felder für jeden Strom oder Kanal basierend auf dem Status seines Lesermoduls. Das Verzögerungsfilter 112 aktualisiert die Benutzeroperationsbits jedes Mal, wenn sich der Status des Lesermoduls ändert.
  • Bestimmte Benutzeroperationen können nur in bestimmten Zuständen des Verzögerungsfilters erlaubt sein. Der Gebrauch einer verbotenen Operation könnte zu unverträglichen Zuständen in dem Verzögerungsfilter und der Benutzerschnittstelle führen. Zum Beispiel ange nommen, dass ein Lesermodul, das eine "Zeitverschiebung" des Multimedia-Inhalts durchführt, am Punkt X im Ringpuffer 124 pausiert. In der Zwischenzeit schreibt das Schreibermodul 122 noch Daten in den Ringpuffer 122. Abhängig von der Größe des Ringpuffers 124 und der Zeit, für die das Lesermodul pausiert hat, gibt es eine Möglichkeit, dass das Schreibermodul 122 zu dem Punkt X, wo das Lesermodul pausiert, aufschließen und versuchen kann, die Daten zu überschreiben. In diesem Fall kann das Verzögerungsfilter 112 das Lesermodul zwingen, die Pause abzubrechen, und eine Nachricht an die Anwendung senden, dass die Pause des Lesermoduls abgebrochen wurde. Es gibt ein kleines Zeitfenster zwischen der Zeit, bei der die Pause des Lesermoduls abgebrochen wird, und der Zeit, bei der die Anwendung die Benachrichtigung empfängt. Während dieses Zeitfensters könnte die Anwendung einen verbotenen Benutzerbefehl, z.B. Vorwärtssuchen, ausgeben. Das Lesermodul wird nun das Vorwärtssuchen zu der Zeit durchführen, bei der die Anwendung die Nachricht empfängt, dass die Pause des Lesermoduls abgebrochen wurde, und wird mit normaler Geschwindigkeit spielen. Die Anwendung und das Verzögerungsfilter 112 befinden sich daher in unverträglichen Zuständen.
  • Um dieses Problem zu vermeiden, erlaubt das Verzögerungsfilter 112 der Anwendung, die Benutzeroperationsbits jedes Mal zu prüfen, wenn eine Benutzeroperation ausgegeben wird, um die Gültigkeit der Operation zu überprüfen. Außerdem berichtet jedes Mal, wenn sich die Benutzeroperationsbits ändern, das Verzögerungsfilter 112 diese Änderung an die Anwendung. Die Anwendung kann daher ihre Benutzerschnittstelle aktualisieren, um sicherzustellen, dass keine ungültigen Benutzeroperationen an das Verzögerungsfilter 112 ausgegeben werden.
  • 15 ist ein Flussdiagramm eines Softwaremoduls oder Objekts, das von der Anwendung durch z.B. eine Anwendungsprogrammschnittstelle ("API") immer dann aufgerufen werden kann, wenn der Benutzer eine Operation anfordert oder sich die Benutzeroperations-Statusbits ändern. In Schritt 430 wartet die Anwendung darauf, dass der Benutzer eine Operation anfordert. Sobald eine Benutzeroperation angefordert ist, prüft die Anwendung in Schritt 431 den Status des entsprechenden Benutzeroperationsbits. Wenn die Operation in Schritt 432 erlaubt ist, gibt die Anwendung in Schritt 433 die verlangte Operation an das Verzögerungsfilter 112 aus. Wenn die verlangte Operation verboten ist, wird die Operation in Schritt 434 zurückgewiesen.
  • 16 ist ein Flussdiagramm, das Schritte veranschaulicht, die das Verzögerungsfilter beim Unterhalten der Benutzeroperationsbits für jedes Statusregister durchführt. In Schritt 440 erfasst das Verzögerungsfilter 112 eine Zustandsänderung eines der Lesermodule. In Schritt 441 werden die Benutzeroperationsbits des Statusregisters für den entsprechenden Strom oder Kanal als eine Funktion der Zustandsänderung aktualisiert. Das Verzögerungsfilter 112 informiert dann in Schritt 442 die Anwendung z.B. durch eine API für diesen Strom oder Kanal über die Zustandsänderung. Die Anwendung kann dann die Benutzerschnittstelle aktualisieren, um ausgewählte Untermengen der in 14 aufgeführten Benutzeroperationen zu sperren oder freizugeben. Eine Aktualisierung der Benutzerschnittstelle kann z.B. das Setzen oder Rücksetzen von Lichtanzeigern, das Ausgeben einer hörbaren Warnung oder das Ändern von Schirmanzeigen umfassen. Die Anwendung kann feststellen, ob die Benutzerschnittstelle aktualisiert werden sollte, indem sie das Verzögerungsfilter 112 nach den Benutzeroperationsbits für einen bestimmten Strom oder Kanal fragt.
  • Zeitverschieben
  • Ein anderer durch die exemplarische Ausführung veranschaulichter breiter erfinderischer Aspekt enthält das Konzept des "Zeitverschiebens", wenn Strömungsinformation wiedergegeben wird. Im Allgemeinen implementiert eine Informationsvorrichtung zum Empfangen von Strömungsinformation das Zeitverschieben, indem sie einen Puffer (in einer Ausführung der Ringpuffer 124), ein Schreibermodul 122, das Blöcke von Strömungsinformation empfängt und Blöcke in den Puffer schreibt, und wenigstens ein Lesermodul 126 enthält, das die Blöcke selektiv aus dem Puffer liest.
  • Obwohl alle Signalverarbeitungsvorrichtungen inhärent eine Signalausbreitungsverzögerung enthalten, ist "Zeitverschieben", wie hierin gebraucht, aus den unten erörterten Gründen getrennt oder in jeder Kombination unterscheidbar. In dem ersten Fall ist der Betrag der Zeitverschiebung (d.h. die relative Position von einem der Lesermodule 125 in Bezug auf das Schreibermodul 122 im Ringpuffer 124) selektiv und einstellbar. In einer ersten Betriebsart kann der Benutzer "Rückspulen", "Pause", "Schnell Vorwärts" und "Spielen" in jeder gewünschten Reihenfolge wählen, um dadurch die relative Leseposition eines zugehörigen Lesermoduls 126 in Bezug auf eine Position des Schreibermoduls 122 im Ringpuffer 124 zu ändern. Wiedergegebene Strömungsinformation (die mit einem Lesermodul 126 beginnt) wird folglich zeitlich gegenüber der Strömungsinformation verschoben, die von dem Schreibermodul 122 geschrieben wird.
  • In einer anderen Betriebsart wird Logik bereitgestellt, um den Betrag der Zeitverschiebung basierend auf dem Betrieb des Systems und ohne Eingreifen des Benutzers einzustellen. Wenn z.B. ein Lesermodul durch einen Benutzer zum Pausieren gebracht wurde, um so die gegenwärtige Position des Lesermoduls 126 im Ringpuffer 124 beizubehalten, kann es zu einer Zeit erforderlich sein, das Vorrücken der Leserposition zu beginnen, damit das Schreibermodul 122 neue Strömungsinformation im Ringpuffer 124 speichern kann. Diese Situation kann erfordern, dass sich das Lesermodul 126 in dem Ringpuffer 124 mit einer Rate vorwärts zu bewegen beginnt, die größer als die oder wenigstens gleich der Rate ist, mit der Strömungsinformation in den Ringpuffer 124 geschrieben wird.
  • Eine automatische Einstellung der Position eines Lesermoduls 126 im Ringpuffer 124 kann auch durch Benutzerbefehle eingeleitet werden, die nicht direkt mit dem Verschieben einer Position des Lesermoduls 122 verbunden sind, z.B. "Spielen", "Pause", "Rückspulen", und "Schnell Vorwärts". Wie wahrscheinlich am besten durch Beispiel veranschaulicht, kann die Quelle von Strömungsinformation für das Verzögerungsfilter 112 eine Mehrfach-Rundfunkkanaleinrichtung sein, wie z.B. ein Fernseh-Tuner oder dergleichen. Wenn der Benutzer das Wiedergeben von Information gemäß einem gewählten Rundfunkkanal pausieren lässt und dann das Wiedergeben der Information auf dem gleichen Rundfunkkanal fortsetzt, wird sich folglich die zugehörige Position des Lesermoduls 126 ändern, um dadurch den relativen Abstand der Position des Lesermoduls 126 und der Position des Schreibermoduls 122 im Ringpuffer 124 zu vergrößern. Wenn der Benutzer dann einen anderen wiederzugebenden Rundfunkkanal, z.B. einen anderen Fernsehkanal, wählt, dann wird das Schreibermodul 122 die mit dem neuen Rundfunkkanal verbundene Strömungsinformation in dem Ringpuffer 124 aufzeichnen. Da jedoch die Position des Lesermoduls 126 gegenüber der Position des Schreibermoduls 122 um eine Verzögerung proportional zu dem Zeitbetrag, den der Benutzer pausiert hatte, zeitverschoben ist, wird der Benutzer die neue Rundfunkkanalwahl erst bemerken, wenn das Lesermodul 126 die durch den Wechsel des Rundfunkkanals bereitgestellte neue Strömungsinformation im Ringpuffer 124 erreicht. Um den durch das Vorangehende dargelegten Problemen zu begegnen, wird die Position des Lesermoduls 126 automatisch zu einer Position im Ringpuffer 124 vorgerückt, die an die Position des Schreibermoduls 122 angrenzt. Diese Technik vermindert den Betrag der Verzögerung, sodass wiedergegebene Strömungsinformation der Rundfunkkanalwahl in einer Mehrfach-Rundfunkkanalumgebung im Wesentlichen folgt.
  • Ein anderes Unterscheidungsmerkmal zwischen "Zeitverschieben", wie hierin gebraucht, und einer typischen Signalausbreitungsverzögerung ist das zum Aufzeichnen von Strömungsinformation verwendete Medium. Insbesondere kann, wie oben erörtert, der Ringpuffer 124 mittels einer der oben beschriebenen Speichereinrichtungen, z.B. RAM-Speicher, Festplatte 27 oder dergleichen, verkörpert werden. Außerdem ist die Menge an Speicher, die im Ringpuffer 124 vorhanden ist, ausreichend, um, wenn gewünscht, eine wahrnehmbare Verzögerung für den Benutzer bereitzustellen. In einer Ausführung liefert die Größe des Ringpuffers 124 wenigstens fünf Minuten Verzögerung zwischen dem Schreiben und Wiedergeben von Strömungsinformation. In einer weiteren Ausführung reicht die Größe des Ringpuffers 124 aus, um wenigstens eine Verzögerung von 30 Minuten zwischen dem Schreiben und Wiedergeben der Strömungsinformation bereitzustellen. In noch einer weiteren Ausführung ist die Größe des Ringpuffers 124 ausreichend, um eine Verzögerung von wenigstens einer Stunde bereitzustellen.
  • Ein weiteres Unterscheidungsmerkmal der Zeitverschiebung, wie hierin gebraucht, ist das Vorhandensein eines einzigen Schreibermodul und einer Vielzahl von unabhängigen Lesermodulen 1261 -126N .
  • In einer Ausführung wird alle von der Strömungsquelle 114 empfangene Information zuerst im Ringpuffer 124 gespeichert, bevor die Strömungsinformation an den Benutzer zurückgegeben wird. Mit anderen Worten, alle an den Benutzer zurückzugebende Information wird mit einem zugehörigen Lesermodul 126 aus dem Ringpuffer 124 gelesen, wobei es keine direkte Verbindung von der Strömungsquelle 114 zu der Wiedergabeeinrichtung 116 gibt.
  • Obwohl das Aufzeichnen im und das Lesen aus dem Ringpuffer 124 vor dem Wiedergeben der Strömungsinformation die Ausbreitungsverzögerung etwas erhöhen kann, wenn die Position des Lesermoduls 126 im Ringpuffer 124 im Wesentlichen an die Position des Schreibermoduls 122 angrenzt, umfassen die Vorteile des immer Schreibens in den und Lesens aus dem Ringpuffer 124 eine Vereinfachung im Systementwurf und -betrieb, was die Systemstabilität erhöht. Obwohl in dem System eine Schaltvorrichtung bereitgestellt werden könnte, um zwischen im Wesentlichen "Live"-Strömungsinformation und zeitverschobener Strömungsinformation, wie vom Verzögerungsfilter 112 bereitgestellt, umzuschalten, erfordert die Schaltvorrichtung, ob Software, Hardware oder eine Kombination davon, trotzdem eine andere Komponente in diesem System, die entworfen und geprüft werden muss, um mit den übrigen Komponenten des Systems zu arbeiten. Des Weiteren ist durch Beseitigen einer direkten Verbindung der Quelle der Strömungsinformation 114 und der Wiedergabe einrichtung 116 und immer Lesen aus dem Ringpuffer 124 vor dem Wiedergeben die Qualität der wiedergegebenen Information gleichbleibend. Mit anderen Worten, es gibt keine Änderung in der Qualität (z.B. Videoqualität oder Audioqualität) von wiedergegebener Strömungsinformation, da alle Information die gleichen Systemkomponenten durchlaufen muss. Indem immer in den Ringpuffer 124 geschrieben und daraus gelesen wird, muss sich außerdem der Benutzer nicht erinnern, einen bestimmten Befehl auszuführen, sodass Strömungsinformation aufgezeichnet wird, um z.B. "Sofort-Abspielen" bereitzustellen. Auf diese Weise ist der Benutzer auch in der Lage, ein ganzes Segment von Strömungsinformation (z.B. eine Fernseh-Show) zurückzugewinnen und zu speichern, auch wenn der Benutzer bereits einiges der Strömungsinformation wiedergegeben hat. Wenn der Benutzer eine Show betrachtet und dann später entscheidet, die Show zu speichern, kann er das Archivsystem 136 aufrufen, um am Anfang der Show im Ringpuffer 124 zu beginnen und eine Kopie der Strömungsinformation in eine dauerhaftere Datei zu übertragen. Das Letztere kann, während der Benutzer noch die Show ansieht, mit einem getrennten Lesermodul 126 durchgeführt werden. Der Benutzer muss jedoch das Speichern oder Archivieren einleiten, bevor das Schreibermodul 122 irgendwelche Teile der gewünschten Strömungsinformation überschreibt, aber in einer bevorzugten Ausführung ist der Ringpuffer 124 lang genug, um viele Minuten, wenn nicht Stunden, an gespeicherter Information bereitzustellen.
  • Datenblockstruktur
  • 17 ist eine bildliche Darstellung eines Blocks 500 von im Ringpuffer 124 gespeicherten Daten für einen Strom einer Mehrstromquelle von Strömungsinformation. Der Datenblock 500 enthält allgemein einen Vorspannteil 502, einen Daten- oder Nutzlastteil 504 und einen Schwanz- oder Endteil 506. Der Vorspannteil 502 enthält relevante Information bezüglich der Größe des Datenblocks und des Kanals, zu dem er gehört. Insbesondere enthält der Vorspannteil 502 ein Feld 508, in dem die Größe des ganzen Blocks, einschließlich dieses Feldes, gespeichert ist. Feld 509 enthält Information, die benutzt wird, um die Strömungsinformation zu identifizieren, zu der der Datenblock gehört. Feld 510 liefert einen Abstand (typischerweise Bytes) vom Beginn des Datenblocks bis zu der Stelle, wo die tatsächliche Strömungsinformation oder Nutzlast im Datenblock 500 gespeichert ist. Feld 511 stellt einen Wert bereit, der die Größe der tatsächlichen Daten oder Nutzlast 504 angibt. In einer Ausführung haben alle Felder 508-511 eine feste Länge, damit ihre Stelle im Datenblock 500 bekannt ist.
  • In einer Ausführung wird auch ein Feld 512 im Vorspannteil 502 bereitgestellt. Das Feld 512 stellt andere für die Strömungsinformation relevante Information bereit. Wie hierin gebraucht, wird das Feld 512 angesichts seiner Beziehung zu den eigentlichen Daten oder Nutzlast 502 als "Präfixfeld" bezeichnet. In einer Ausführung hat das Präfixfeld 512 eine variable Länge, sodass die Länge der Information nicht eingeschränkt werden muss. Wenn gewünscht, wird auch ein Feld 513 bereitgestellt, das die Größe des Präfixfeldes 512 angibt. Typischerweise hat das Feld 513, wie die Felder 508-511, eine feste Länge.
  • Das Präfixfeld 512 kann benutzt werden, um Information, z.B. Synchronisationsanzeiger, unten erörtert, einen Zeiger auf den nächsten Block, der zum gleichen Strom gehört, oder andere Information, wenn gewünscht, zu speichern. Wie die Fachleute einsehen werden, wird ein Format für Information, die in dem Präfixfeld 512 enthalten sein soll, spezifiziert, damit relevante Information leicht decodiert werden kann. Da das Präfixfeld 512 eine beliebige Länge haben kann, kann zusätzliche Information, wenn nötig, gespeichert werden, um so den Datenblock 500 erweiterbar zu machen.
  • Man sollte auch zur Kenntnis nehmen, dass das Präfixfeld 512 auch eine ausgewählte Menge an "Füll"-Daten enthalten kann. Die Fülldaten werden benutzt, um die Größe des Datenblocks auf eine vorbestimmte Länge einzustellen oder zu erhöhen, was für die Verarbeitung oder Speicherung im Ringpuffer 124 erwünscht sein kann.
  • Das Daten- oder Nutzlastfeld 504 speichert von der Strömungsinformationsquelle 114 empfangene Digitaldaten, die wiedergegeben werden.
  • In der veranschaulichten Ausführung enthält der Schwanz- oder Endteil 506 zwei Felder 520 und 521. Das Feld 520, hierin auch als "Suffix"-Feld bezeichnet, gleicht dem Präfixfeld dadurch, dass es benutzt werden kann, um Information über in dem gleichen Strom folgende oder verangehende Datenblöcke zu speichern. In einer Ausführung ist das Suffixfeld 520 an einer bekannten Stelle vom Ende des Datenblocks 500 und speichert einen Zeiger, der die Stelle des vorangehenden Datenblocks, der dem gleichen Kanal entspricht, anzeigt. Diese Information ist besonders nützlich, wenn es erforderlich sein kann, eine "Rückspulen"-Operation auf der im Ringpuffer 124 enthaltenen Strömungsinformation durchzuführen. Das Suffix-Feld 520 kann auch andere in dem Datenblock 500 vorhandene Information, z.B. mit Feld 511 und Feld 513 verbundene Daten, enthalten. In einer dem Präfixfeld 512 ähnlichen Weise ist ein Format für die in dem Suffixfeld 520 enthaltene Information vorbestimmt und dem Lesermodul bekannt, damit relevante Information davon gewonnen werden kann. Das Suffix feld 520 kann feste oder variable Länge haben, wobei es erwünscht sein kann, ein zusätzliches Feld ähnlich Feld 513 bereitzustellen, das die Länge des Suffixfelds 520 angibt. Das Suffixfeld 520 kann auch benutzt werden, um, wenn gewünscht, "Füll"-Daten zu speichern.
  • Das Feld 521 liefert die Größe des Datenblocks 500 und ist als solches identisch mit dem Feld 508 im Vorspannteil 502. Das Feld 521 ist nützlich, wenn ein Lesermodul rückwärts durch den Ringpuffer 124 geht. Auf diese Weise kann das Lesermodul die Größe eines Datenblocks 500 durch Lesen des im Feld 521 enthaltenen Werts feststellen, wobei an diesem Punkt das Lesermodul festgestellt hat, wo sich das Ende des vorangehenden Blocks befindet. Ohne das Vorhandensein des Felds 521 müsste das Lesermodul ansonsten den Datenblock absuchen, um seine Größe oder Anfangsstelle zu ermitteln, was Verarbeitungszeit verbrauchen kann.
  • 18 veranschaulicht eine Folge von Datenblöcken 530 von einer Mehrstrom-Strömumgsinformationsquelle. Insbesondere umfassen Datenblöcke 532A, 532B und 532C einen Teil eines ersten Stromes; Datenblöcke 534A und 534B umfassen einen Teil eines zweiten Stromes, und Datenblöcke 536A und 536B umfassen einen Teil eines dritten Stromes. Die Datenblöcke 532A-532C, 534A-534B und 536A-536B umfassen gemeinsam einen einzelnen Kanal (z.B. Audio, Video und Daten) und sind gewöhnlich, wie in 18 varanschaulicht, verschachtelt. Grundsätzlich besteht jedoch keine Notwendigkeit, eine bestimmte Reihenfolge einzuhalten.
  • Wie oben angedeutet, können die Präfixfelder 512 und Suffixfelder 520 verwendet werden, um Zeiger zu speichern, die vorangehende und nachfolgende Datenblöcke in jedem der Stromströme anzeigen. In der Darstellung von 18 stellen Pfeile 534 dar, dass Präfixfelder 512 von Datenblöcken 530 Zeiger oder Adressen des unmittelbar folgenden Datenblocks in jedem der Ströme speichern. Ähnlich stellen Pfeile 536 dar, dass Suffixfelder 520 von jedem der Datenblöcke Zeiger oder Adressen des in jedem Strom unmittelbar vorangehenden Datenblocks speichern. In einer Ausführung speichert jedes der Präfixfelder 512 die Adresse des Präfixfelds 512 in dem unmittelbar folgenden Datenblock, während jedes der Suffixfelder 520 die Adresse des Suffixfelds 520 in dem unmittelbar vorangehenden Datenblock speichert. Auf diese Weise kann das Lesermodul 126 Datenblöcke für einen bestimmten Strom von Strömungsinformation schnell auffinden und verarbeiten.
  • 19 veranschaulicht eine zweite Sequenz von Datenblöcken 550. In der Sequenz 550 gehören Datenblöcke 552, 554 und 556 zu von der Strömungsinformationsquelle 114 empfangener Strömungsinformation, die von Wiedergabeeinrichtungen 116 in der oben und unten weiter erörterten Weise selektiv wiedergegeben werden wird. Die Sequenz 550 enthält jedoch Datenblöcke 558 und 560, die die Sequenz 550 "vollstopfen" und keine wiederzugebende Strömungsinformation enthalten. Stattdessen werden die Datenblöcke 558 und 560 benutzt, um, wenn gewünscht, die im Ringpuffer 124 oder einer anderen Speichereinrichtung gespeicherte Sequenz 550 zu organisieren oder zu strukturieren. Zum Beispiel kann es erwünscht sein, dass im Ringpuffer 124 gespeicherte Datenblöcke mit einem definierten Mediengrenzenabschnitt, z.B. Sektor- oder Cluster-Grenzen, übereinstimmen. In 19 sind gewünschte Grenzen bei 562A und 562B angegeben. Datenblöcke 552, 554 und 556 sind zusammen mit einem Fülldatenblock 560 geeigneter Größe oder Länge organisiert, sodass ein Datenblock 564 an der Grenze 562B beginnt. Wenn gewünscht, kann eine Vielzahl von Fülldatenblöcken benutzt werden, und die Reihenfolge von Strömungsinformations-Datenblöcken und Fülldatenblöcken kann verändert werden, um alle gewünschten Kriterien zu erfüllen. Die Sequenz von 19 ist nur eine exemplarische Sequenzstruktur.
  • Man sollte beachten, dass das Feld 509 jedes Datenblocks benutzt werden kann, um Fülldatenblöcke von anderen Strömungsinformations-Datenblöcken zu unterscheiden, wobei das Schreibermodul 122 Fülldatenblöcke während des Verarbeitens und Bildens von Strömungsinformations-Datenblöcken nach Bedarf erzeugen kann. Des Weiteren können Fülldatenblöcke, wenn gewünscht, in Kombination mit "Füll"-Daten benutzt werden, die im Präfixfeld 512 oder Suffixfeld 520 bereitgestellt werden. Der Mux-Formatierer 138 und das Schreibermodul 140 können auch den Gebrauch von Fülldatenblöcken und/oder im Präfixfeld 512 oder Suffixfeld 520 enthaltener Fülldaten implementieren.
  • Mehrfache Leser pro Puffer
  • In einigen Fällen kann es erwünscht sein, einer Vielzahl von Benutzern zu gestatten, jederzeit auf die Strömungsinformation zuzugreifen. Dies kann auf vielfache Weise zustande gebracht werden. Zum Beispiel könnte die Strömungsinformation dupliziert werden und ein Lesermodul könnte für jede Kopie der Strömungsinformation bereitgestellt werden. Dies erfordert jedoch eine große Menge an Speicher und kann auch erhöhte Verarbeitungsleistung zum Herstellen mehrfacher Kopien der Strömungsinformation und Zugreifen auf die duplizierten Kopien erfordern. Sobald die vorbestimmte Zahl von Kopien der Strömungsinformation im Gebrauch ist, kann es außerdem schwierig werden, neue Benutzer hinzuzufügen.
  • 20 gleicht der oben beschriebenen 6. 20, zeigt jedoch Teile eines Systems 610 ausführlicher und beseitigt der Klarheit wegen andere Teile. 20 zeigt, dass das System 610 einen Ringpuffer 124, eine Vielzahl von Lesermodulen 614, 616, 618 und 610 (die die gleichen wie die oben erwähnten Lesermodule 126 oder ähnliche sein können), die mit einer Vielzahl von Benutzern (Benutzer 630-636) verbunden sind. Desgleichen zeigt 20, dass jedes Lesermodul eine Schnittstelle 622, 624, 626 bzw. 628 enthält. Die Schnittstellen 622-628 werden unten ausführlicher beschrieben.
  • Bei der in 20 gezeigten veranschaulichenden Ausführung wird eine Vielzahl mit den Schnittstellen 622-628 verbundener Benutzer 630, 632, 634 und 636 dargestellt. In der gezeigten Ausführung sind Benutzer 630 und 632 Betrachter oder Wiedergabeanwendungen zum Betrachten oder Wiedergeben von im Ringpuffer 124 gespeicherter Strömungsinformation, während Benutzer 634 und 636 Datenspeicherorte sind, die zum Archivieren der im Ringpuffer 124 gespeicherten Strömungsinformation verwendet werden. 20 zeigt auch ein getrenntes Anwendungsprogramm 638, das separat mit den Schnittstellen 622-628 verbunden ist.
  • Man sollte wiederum beachten, dass 20 nur veranschaulichend ist und dass jede Zahl von Benutzern oder Anwendungsprogrammen mit jeder Zahl von Lesermodulen verbunden werden kann. Desgleichen können die Benutzer jede Art von geeigneten Benutzern sein, die auf die im Ringpuffer 124 gespeicherte Strömungsinformation zuzugreifen wünschen und auf die Information aus anderen Gründen als Betrachten oder Archivierungszwecke zugreifen können, wie in 20 gezeigt. Ebenso muss nach diesem Aspekt der vorliegenden Erfindung die gepufferte Strömungsinformation nicht unbedingt im Ringpuffer 124 gespeichert werden, sondern kann in einem linearen Puffer oder jeder anderen Art von Puffer gespeichert werden. Der Ringpuffer 124 wird daher nur der Einfachheit wegen veranschaulicht.
  • In einer veranschaulichenden Ausführung werden die Lesermodule 614-620 als Objekte implementiert, die dem COM objektorientierten Programmiermodell entsprechen. Jedes Lesermodul oder "Leserobjekt" hat unabhängigen Zugriff auf die gepufferte Strömumgsinformation. Jedes Lesermodul 614-620 ist als auf die Strömungsinformation an einer anderen Stelle auf dem Ringpuffer 124 zugreifend dargestellt. Dies zeigt, dass die Lesermodule 614-620 auf die gepufferte Information zu verschiedenen Zeiten in dem gepufferten Strömungsinformationsstrom zugreifen können. Dies erlaubt den vielfachen Benutzern 630-636, alle Merkmale der oben erwähnten Zeitverschiebung zu verwenden, ohne andere Benutzer, die auf den gepufferten Strom zugreifen, zu stören. Ein Benutzer kann z.B. die Strömumgsinformation zum späteren Betrachten archivieren, während ein anderer Benutzer zur gleichen Zeit die Information anschauen kann.
  • Ebenso kann der Archivbenutzer die gepufferte Strömungsinformation von einer Zeit oder Stelle in dem Datenpuffer speichern, die anders ist als die Zeit oder Stelle in dem Datenpuffer, auf die der Betrachter zugreift. Zum Beispiel kann der Archivbenutzer einfach die Information lesen wie sie im Ringpuffer 124 aufgezeichnet ist und sie im Archivspeicher speichern. Im Gegensatz dazu kann der Betrachter die Daten betrachten, aber intermittierend unterbrechen, um Pausen zu machen oder andere Aufgaben durchzuführen. Das mit dem Betrachter verbundene Lesermodul kann sich daher durchaus an einer zeitlich versetzten, anderen Steile im Puffer 124 befinden als das mit dem Archivprozess verbundene Lesermodul.
  • 20 zeigt somit ein System, durch das mehrfache Lesermodule auf die gepufferte Strömungsinformation zugreifen können. Das gezeigte System benötigt nur ein Schreibermodul zum Puffern der Strömungsinformation und nur einzige Kopie der Strömungsinformation. Dies verringert in hohem Maße die Menge an benötigtem Speicher und reduziert außerdem die benötigte Verarbeitungsleistung. Da in einer veranschaulichenden Implementierung die die Lesermodule einfach Objekte sind, die zum Zugreifen auf die Information im Puffer 124 eingerichtet sind, kann praktisch dem System jede Zahl von Objekten hinzugefügt werden, begrenzt nur durch die Rechenressourcen des Systems. Dies kann zustande gebracht werden, indem einfach ein anderes Leserobjekt eingerichtet wird.
  • Da die in den Ringpuffer 124 geschriebene Strömungsinformation aus einem oder mehreren Kanälen bestehen kann, die je eine Vielzahl von Strömen (z.B. Audio, Video, Closed Captioning usw.) haben, wird der Ausgang von jedem der Lesermodule 614-620 wahrscheinlich eine Vielzahl von wirksamen Ausgangsstiften haben, wobei jeder Stift einen der Ströme eines gegebenen Kanals in der Strömungsinformation befördert. Da das System 610 veranschaulicht, dass eine Vielzahl verschiedener Lesermodule benutzt werden kann, um auf die gleiche gepufferte Strömungsinformation zuzugreifen, kann dies einige Hindernisse mit sich bringen, die überwunden werden müssen.
  • Zum Beispiel kann in einigen Strömungs-Architekturen die Notwendigkeit entstehen, die mit jedem Lesermodul 614-620 verbundenen Stifte zu gruppieren, sodass der Benutzer, die Anwendung oder irgendeine andere Komponente, die Daten von dem Lesermodul empfängt, weis, welche Stifte zu diesem Lesermodul gehören. Ein Beispiel einer Strömungs-Architektur, die erfindungsgemäß verwendet werden kann, ist eine als 'DirectShow'-Services bekannte Architektur.
  • DirectShow-Services ist eine Architektur, die käuflich und wohl bekannt ist. Zum besseren Verständnis von bestimmten Aspekten der vorliegenden Erfindung kann jedoch eine kurze Beschreibung des DirectShow-Services-Systems von Vorteil sein.
  • DirectShow-Services bezieht sich auf ein modulares System von steckbaren Komponenten, bekannt als Filter, die in einer als Filtergraph bekannten Konfiguration angeordnet sind. Eine als Filtergraph-Manager bezeichnete Komponente überwacht die Verbindung dieser Filter und steuert den Fluss der Strömungsinformation dadurch. Ein exemplarischer Filtergraph besteht aus einer Sammlung von Filtern verschiedener Arten.
  • Die meisten Filter können in eine von drei Arten eingeteilt werden.
    • 1. Quellenfilter nehmen Daten von einer Quelle, z.B. einer Plattendatei, Camcorder, Satellitenempfänger, Internet-Server oder VCR, und führen diese Daten in den Filtergraphen ein.
    • 2. Transformationsfilter verarbeiten Daten und leiten sie an andere Teile des Filtergraphen weiter oder heraus aus dem Filtergraphen.
    • 3. Wiedergabefilter geben Daten an eine Hardwareeinrichtung oder eine Stelle zurück, die eine Medieneingabe annimmt (z.B. Speicher oder Plattendatei).
  • Zusätzlich zu diesen drei Typen von Filtern gibt es auch andere Arten von Filtern. Beispiele anderer Filter sind Effektfilter, die Effekte hinzufügen, ohne den Datentyp zu ändern, und Parser-Filter, die eingerichtet sind, das Format der Quellendaten zu verstehen und zu kennen, wie richtige Bytes zu lesen sind, Zeitstempel zu erzeugen und Suchoperationen durchzuführen.
  • Des Weiteren ist es durchaus möglich, dass einige Filter eine Kombination von Filtertypen oder Funktionen darstellen. In der DirectShow-Architektur soll ein Filter Strömungsinformation "stromab" zu einem nächsten folgenden Filter leiten, Ein "Stromauf"-Filter betrifft das Filter, das Daten an das Stromab-Filter leitet, und ein "Stromab"-Filter betrifft das nächste Filter in der Linie, um die Daten zu empfangen. In einer veranschaulichenden Ausführung sind die Filter in irgendeiner Sprache geschriebene Programmmodule, die Objekte erzeugen können, die mit Komponenten-Objektmodell-(COM)Programmierung verwachsen sind. COM-Programmierung bezieht sich natürlich auf das objektorientierte Programmiermodell, das definiert, wie Objekte mit einer einzelnen Anwendung oder zwischen Anwendungen interagieren. In COM greift Client-Software auf ein Objekt über einen Zeiger zu einer Schnittstelle (z.B. API) zu, die einen verwandten Satz von Funktionen, genannt Verfahren, auf dem Objekt hat.
  • Ein Filtergraph 640, dessen Zweck darin besteht, MPEG-komprimierte Videoinformation von einer Datei abzuspielen, kann z.B. die in 20A dargelegte Form annehmen. Der Filtergraph 640 enthält ein Quellenfilter 642, einen MPEG-Parser 644, ein Video-Dekompressions-Transformationsfilter 646, ein Audio-Dekompressions-Transformationsfilter 648, ein Video-Wiedergabefilter 650 und ein Audio-Wiedergabefilter 652. Das Quellenfilter 642 liest Daten von einer Platte und liefert sie als Strömungsinformation an den MPEG-Parser 644. Der MPEG-Parser 644 zerlegt die Strömungsinformation in ihre Audio- und Videoströme.
  • Die Transformationsfilter 646 und 648 dekomprimieren die Video- und Audiodaten in die entsprechenden Ströme. Die Wiedergabefilter 650 und 652 zeigen die Videodaten auf einem Schirm an und senden die Audioinformation an eine Sound-Karte.
  • Man kann somit sehen, dass, wenn bestimmte Strömungs-Architekturen verwendet werden, wie z.B. die DirectShow-Architektur, es wichtig sein kann, dass Anwendungen oder andere Programmiermodule, die Strömungsinformation von einem der Lesermodule 614-620 empfangen sollen, wissen, welche Ausgangsstifte welchem der Lesermodule entsprechen. Da z.B. die von jedem der Lesermodule 614-620 gelesene Strömungsinformation einen Kanal mit einer Vielzahl von Strömen enthalten kann, ist es wichtig, dass ein Benutzer oder ein Anwendungsprogramm, das Information von einem gegebenen Leser empfängt, alle mit diesem und keinem anderen Leser verbundenen Ströme empfängt. Mit anderen Worten, es wäre für ein Anwendungsprogramm (oder z.B. ein Wiedergabefilter) unerwünscht, einen Audiostrom vom Lesermodul 614, aber einen Videostrom und Closed-Captioning-Strom vom Lesermodul 616 zu empfangen. Das Lesermodul 614 kann durchaus die Strömungsinformation von einer anderen Stelle im Puffer 124 lesen als das Lesermodul 614. Die Audio- und Closed-Captionig-Ströme würden daher nicht dem Videostrom entsprechen.
  • Um dieses Hindernis anzusprechen, enthält ein Merkmal der vorliegenden Erfindung eine neue COM-Schnittstelle, die einem Objekt außerhalb der Lesermodule 614-620 erlaubt, die zu diesem einzelnen Lesermodul gehörenden Ausgangsstifte aufzuzählen. Mit anderen Worten, in der Ausführung, in der die Lesermodule 614-620 als Objekte implementiert sind, sind diese Objekte konfiguriert, um durch zugehörige Schnittstellen 622-628 zu der Anwendung (oder anderen externen Komponenten, die Kontakt mit den Lesermodulen haben) Verfahren zu enthüllen, die eine Bearbeitung des Objekts erlauben. Ein durch die Schnittstellen 622-628 enthülltes exemplarisches Verfahren wird als IenumChannelStreamPin bezeichnet, das, wenn von einem äußeren Objekt aufgerufen, einen Wert ergibt, der eine Aufzählung der einzelnen Ausgangsstifte darstellt, die zu dem einzelnen Lesermodul gehören, das gefragt wurde. Auf diese Weise kann ein äußeres Objekt über seine zugehörige Schnittstelle 622-628 schnell und einfach eine Aufzählung der einzelnen Stifte erhalten, die zu einem der gegebenen Lesermodule 614-620 gehören.
  • Die Schnittstellen 622-628 enthüllen auch ein anderes Verfahren, das erlaubt, dass jeder spezifische Ausgangsstift durch irgendeines der Lesermodule 614-620 nach dem Aufzählerobjekt seiner Gruppe gefragt wird. Mit anderen Worten, ein äußeres Objekt kann jeden Stift, mit dem es Kontakt hat, abfragen, um die Identität des bestimmten Aufzählers zu erlangen, der der Gruppe entspricht, die diesen Stift enthält. In dieser Weise kann ein Benutzer oder Anwendungsprogramm, das erst kürzlich Zugang zu einem Ausgangsstift erlangte, diesen Ausgangsstift abfragen, um den mit diesem Ausgangsstift verbundenen Aufzähler zu finden. Die externe Komponente kann dann das durch den Aufzähler enthüllte Verfahren aufrufen, um eine vollständige Aufzählung der diesem Kanal entsprechenden Stifte zu erlangen. Die externe Komponente kann somit leicht und genau die Identität der Stifte erlangen, die mit jedem gegebenen Lesermodul oder Kanal, der vom System 610 ausgegeben wird, verbundenen sind.
  • Indexieren und Suchen
  • Wie oben erörtert, erzeugt ein Indexer 132 einen Index, der Indexeinträge enthält, die zum Suchen verwendet werden. Mit anderen Worten, jedes der Lesermodule 614-620 kann nach jedem Punkt im Puffer 124 suchen, der einen entsprechenden Eintrag in dem Index hat. In einigen Fällen kann, abhängig von der Art der Strömungsinformation, im Wesentlichen jeder Punkt im Puffer 124 indexiert werden. Für andere Arten von Strömungsinformation kann es jedoch erwünscht sein, nur bestimmte Punkte in der Strömungsinformation zu indexieren.
  • Solche Punkte werden hierin als Sync-Punkte bezeichnet. Mit anderen Worten, die Natur der Strömungsinformation kann es unvernünftig oder unerwünscht machen, nach bestimmten Punkten in der Strömungsinformation zu suchen und das Wiedergeben der Daten an diesem Punkt zu beginnen.
  • Bestimmte Video-Strömungsinformation arbeitet z.B. auf dem bekannten MPEG2-Videoformat. Ein solches Format enthält eine Anzahl verschiedener Typen von Rahmen, die als I-Rahmen, B-Rahmen und P-Rahmen bezeichnet werden. I-Rahmen benötigen keine andere Information. um wiedergegeben zu werden, während B- und P-Rahmen abhängige Rahmen sind, die Information in einem vorangehenden I-Rahmen benötigen, um wiedergegeben zu werden. In einem solchen Beispiel kann es unerwünscht sein, nach einem Zeiger in Puffer 124 zu suchen, der mit einem B- oder P-Rahmen beginnt. In der Tat können viele herkömmliche Videodecoder nicht einmal in der Lage sein, Daten, die von einem B- oder P-Rahmen geliefert werden, ohne die nötige Information, die im vorangehenden I-Rahmen enthalten ist, zu decodieren. Es kann daher in hohem Maße wünschenswert sein, nur I-Rahmen in einem solchen, im Puffer 124 gespeicherten Videostrom zu indexieren.
  • Desgleichen, wo die Strömungsinformation einen Strom enthält, z.B. geschriebenen Text für Closed-Captioning, kann es erwüscht sein, einem Benutzer zu gestatten, nach Punkten zu suchen, die dem Beginn oder Ende von Wörtern, Sätzen oder Abschnitten entsprechen. Das gleiche gilt für einen Audiostrom. Mit anderen Worten, es kann erwünscht sein, einem Benutzer zu erlauben, nur nach bestimmten Stellen in dem Audiostrom zu suchen. Solche Stellen können Satz- oder Wortgrenzen usw. entsprechen.
  • Ein erklärendes Merkmal der vorliegenden Erfindung enthält daher einen Stromanalysator 654, wie z.B. in 21A gezeigt. Der Stromanalysator 654 ist mit einer Quelle 656 von Strömungsinformation und einer Senke 658 von Strömungsinformation verbunden gezeigt. Der Stromanalysator 654 ist eingerichtet, um die Strömungsinformation von der Quelle 656 (die als ein Softwareobjekt implementiert sein kann) zu empfangen.
  • In einer erklärenden Ausführung verkörpert der Stromanalysator 654 Kenntnis der Organisation der von der Quelle 656 gelieferten Strömungsinformation. Der Analysator 654 verkörpert außerdem erklärend Kenntnis bezüglich der Erfassung von logischen Grenzen in der Information, um die Stelle dieser Grenzen (Sync-Punkte) zu erlangen. Die Stelle der Sync-Punkte kann dann jeder anderen Software- oder Hardware-Komponente vorgelegt werden, die die Information wünschen mag, um das Vorwärts- oder Rückwärts-Springen durch die Strömungsinformation praktikabler zu ermöglichen.
  • Der Stromanalysator 654 stellt erklärend ein Anzeichen der Sync-Punkte in einer von zwei Weisen bereit. In einer ersten Ausführung bettet der Stromanalysator 654 die Stelle der Sync-Punkte in der Strömungsinformation selbst ein, wenn sie an die Informationssenke 658 geliefert wird. Dies wird als In-Band-Kommunikation von gewonnener Sync-Punkt-Information bezeichnet.
  • In einer alternativen Ausführung kann der Stromanalysator 654 die Sync-Punkt-Information, wie durch den gestrichelten Pfeil 660 angezeigt, getrennt von der an die Senke 658 gelieferten Strömungsinformation bereitstellen. Dies wird als Außer-Band-Kommunikation von gewonnener Sync-Punkt-Information bezeichnet.
  • In einer erklärenden Ausführung ist der Stromanalysator 654 in der C++ Programmiersprache implementiert, der Klassen verwendet und mit anderen Softwareobjekten mittels COM-Schnittstellen kommuniziert. Man sollte aber beachten, dass eine solche Implementierung nur erklärend ist und die vorliegende Erfindung nicht auf dieses einzelne Implementierungsverfahren beschränkt ist.
  • Die Informationssenke 658 kann natürlich ein Stromab-Filter (stromab von dem Stromanalysator 654), ein Anwendungsprogramm, ein Wiedergabefilter oder eine andere Programmkomponente usw. sein. Die Senke 658 kann den gewonnenen Sync-Punkt selbst verwenden oder ihn einfach an andere Komponenten weitergeben, die wünschen mögen, die gewonnene Sync-Punkt-Information zu verwenden. In einer erklärenden Ausführung wird die gewonnene Sync-Punkt-Information dem Verzögerungssfilter 112 bereitgestellt, das sie beim Erzeugen eines Indexes benutzt, wie unten ausführlicher beschrieben wird.
  • In einer anderen erklärenden Ausführung untersucht der Stromanalysator 654 nicht nur die ankommende Strömungsinformation auf logische Grenzen, die als Sync-Punkte benutzt werden können, sondern untersucht die ankommende Strömungsinformation auch auf interessierende Punkte, die erwünschte Sync-Punkte sein können. Solche interessierenden Punkte können im Wesentlichen alle Punkte sein, von denen angenommen wird, dass sie möglicherweis für den Benutzer von Interesse sind. In einer solchen Ausführung verkörpert daher der Stromanalysator 654 Kenntnis über den Typ und das Format der Information in dem ankommenden Strom sowie Kenntnis über die Arten von Ereignissen, die für den Benutzer von Interesse sind. Ebenso ist der Stromanalysator 654 konfiguriert, um Kenntnis darüber zu enthalten, wie diese interessierenden Punkte in der ankommenden Strömungsinformation zu erfassen sind, und ist mit einem Mechanismus versehen, um die Stelle in dem Datenstrom, der diesen interessierenden Punkten entspricht, zu berichten.
  • 21B und 21C sind ausführlichere Blockschaltbilder, die den Stromanalysator 654 nach erklärenden Ausführungen der vorliegenden Erfindung veranschaulichen. 21B veranschaulicht eine Ausführung des Stromanalysators 654, in der die gewonnene Sync-Punkt-Information außer Band bereitgestellt wird, während 21C eine Ausführung veranschaulicht, in der die gewonnene Sync-Punkt-Information in Band bereitgestellt wird.
  • In 21B enthält der Stromanalysator 654 eine Punkt-von-Interesse-(POI)Analysekomponente 662, eine Punkt-von-Interesse-Schnittstellenkomponente 664 und eine Strömungsinformation-Schnittstellenkomponente 666. Die Strömungsinformation wird von der Quelle 656 an die Punkt-von-Interesse-Analysekomponente 662 geliefert, die sich an ihre Wissensbasis bezüglich der Art von Information und der Organisation von in der Strömungsinformation enthaltener Information wendet und sich an ihre Kenntnis bezüglich der den Benutzer interessierenden Punkte wendet. Die POI-Analysekomponente 662 identifiziert dann die interessierenden Punkte in der Strömungsinformation und stellt einen Ausgang 668 bereit, der die Stelle des interessierenden Punkts anzeigt (d.h., er zeigt die Sync-Punkte an). Der Ausgang 668 wird an die POI-Schnittstelle 664 angelegt, die die Information für die Senke 658 verfügbar macht. Ähnlich gibt die POI-Analysekomponente 662 die ankommende Strömungsinformation an die Strömungsinformations-Schnittstelle 666 weiter, sodass die Strömungsinformation der Senke 658 getrennt zur Verfügung steht.
  • 21C gleicht 21B, und ähnliche Elemente sind entsprechend nummeriert. Anstatt jedoch zwei getrennte Schnittstellen 664 und 666 für die Sync-Punkt-Information und die Strömungsinformation zu haben, hat der in 21C gezeigte Stromanalysator 654 eine einzige kombinierte Schnittstelle 669, die die Punkt-von-Interesse-(oder Sync-Punkt)Information in die Strömungsinformation integriert und sie als einen In-Band-Ausgang an die Senke 658 liefert. Man sollte natürlich beachten, dass die Integration der Sync-Punkt-Information auch in der POI-Analysekomponente 662 durchgeführt werden kann. In jedem Fall wird ein einzelner Ausgang von Strömungsinformation (die die Sync-Punkt-Information in-band enthält) der Senke 658 zur Verfügung gestellt.
  • 21D ist ein ausführlicheres Blockschaltbild einer Ausführung der Punkt-von-Interesse-Analysekomponente 662, bei der die Integration der Sync-Punkt-Information in die an ihrem Ausgang bereitgestellte Strömungsinformation innerhalb der Punkt-von-Interesse-Analysekomponente 662 durchgeführt wird. Die POI-Komponente 662 enthält in der in 21D gezeigten erklärenden Ausführung eine Parsing-Komponente 670, eine Schriftsprachen-Analysekomponente 672, eine Video-Analysekomponente 674 und eine Audio-Analysekomponente 676. Während jede Art von Informationsanalysenkomponente benutzt werden kann, werden die Komponenten 672, 674 und 676 nur zu exemplarischen Zwecken veranschaulicht. Die POI-Analysekomponente 662 enthält auch die Integrationskomponente 678.
  • Die Parsing-Komponente 670 empfängt die Strömungsinformation an ihrem Eingang. In der veranschaulichten Ausführung kann die Strömungsinformation eine Vielzahl von Strömen (obwohl nur ein einziger Strom verarbeitet werden kann), z.B. einen Schrifttextstrom (z.B. Closed-Caption-Information), einen Videostrom und einen Audiostrom, enthalten. Die Parsing-Komponente 670 zerlegt die ankommende Strömungsinformation in ihre jeweiligen Stromkomponenten und stellt diese Komponenten geeigneten Analyseblöcken 672, 674 und 676 zur Verfügung.
  • Die Analysekomponenten 672, 674 und 676 analysieren die ankommenden Ströme, identifizieren mögliche interessierende Punkte und erzeugen Information, die die Stelle dieser interessierenden Punkte anzeigt. Die Strömungsinformation sowie die Sync-Punkt-Information wird dann von jeder Analysekomponente 672-676 an die Integrationskomponente 678 übergeben. In der veranschaulichten Ausführung reintegriert die Integrationskomponente 678 die Ströme in die ursprüngliche Strömungsinformation und bettet auch die Sync-Punkt-Information an geeigneten Stellen in der Strömungsinformation ein. Die In-Band-Sync-Punkt-Information wird daher in dem Datenstrom am Ausgang der Integrationskomponente 678 bereitgestellt.
  • Man sollte beachten, dass die Analysekomponenten 672-676 nach im Wesentlichen allen interessierenden Punkten suchen können. Zum Beispiel kann die Schriftsprachen-Komponente 672 konfiguriert sein, um nach Satzgrenzen oder Wortgrenzen zu suchen. Beim Suchen nach Satzgrenzen kann die Analysekomponente einfach so konfiguriert sein, dass sie nach Perioden in dem ankommenden Strom sucht. Um nach Wortgrenzen zu suchen, kann die Komponente 672 einfach so konfiguriert sein, dass sie nach Zwischenräumen in dem ankommenden Strom sucht. Man sollte auch beachten, dass die Sprachenanalysekomponte 672 eine höher entwickelte Analysekomponente sein kann, z.B. eine Natursprachen-Verarbeitungs- oder Natursprachen-Analysekomponente, wobei in diesem Fall die Komponente 672 konfiguriert sein kann, um bestimmte Wendungen, Zunahmen, Sprachteile usw. zu identifizieren. In jedem Fall wird Information, die die von der Komponente 762 zu identifirenden Schriftsprachenpunkte von Interesse anzeigt, an die Komponente 672 geliefert, sodass die gewünschten Punkte von Interesse in dem ankommenden Strom identifiziert werden können.
  • Desgleichen kann die Video-Analysekomponente 674 benutzt werden, um jede Zahl von verschiedenen interessierenden Punkten zu identifizieren. Zum Beispiel kann die Komponente 674 konfiguriert sein, um Werbeunterbrechungen sowie die oben erwähnten I-, B- und P-Rahmen zu identifizieren. Beim Identifizieren von Werbeunterbrechungen in dem ankommenden Videostrom kann die Video-Analysekomponente 674 konfiguriert sein, um nach einem schwarzen Schirm zu suchen, der für eine gewisse vorbestimmte Zeitdauer vorhanden ist. Desgleichen enthalten in dem MPEG2-Videoformat die I-, B- und P-Rahmen Marken, die sie als solche identifizieren, oder ein Vorspann geht voraus, der die Rahmen identifiziert. Die Video-Analysekomponente 674 kann daher konfiguriert werden, um nach der Identifizierungsinformation in dem Strom zu suchen.
  • Die Audio-Analysekomponente 676 kann auch konfiguriert werden, um nach einem weiten Bereich von interessierenden Punkten zu suchen. Zum Beispiel kann, wenn der ankommende Strom ein Horrorfilm, ein Kriegsfilm, ein Actionfilm oder ein Fernsehprogramm ist, die Audio-Analysekomponente konfiguriert werden, um nach lauten Geräuschen wie Geschrei, Gewehrschüsse oder Autoverfolgungsgeräusche zu suchen. In diesem Fall kann die Komponente 676 einfach konfiguriert sein, um nach Amplitudeninformation zu suchen, die eine vorbestimmte Schwelle übersteigt. Desgleichen kann die Komponente 676 eine fortgeschrittenere Komponente sein, z.B. eine Spracherkennungs- oder Stimmerkennungs-Komponente. In dem Fall, wo die Komponente 676 eine Spracherkennungs-Komponente enthält, kann sie konfiguriert sein, um nach Satz- oder Wortgrenzen zu suchen, oder sie kann benutzt werden, um nach bestimmten Wörtern oder Wendungen zu suchen. Zum Beispiel kann die Komponente 676 benutzt werden, um profane Wörter zu identifizieren, die zum späteren Löschen markiert werden können. Ebenso kann, wo die Komponente 676 eine Stimmerkennungs-Komponente enthält, diese konfiguriert sein, um die Stimme von bestimmten Schauspielern oder Schauspielerinnen oder jeder anderen Wesenheit zu identifizieren, die so identifiziert werden kann.
  • Es sei nochmals erwähnt, dass die Punkt-von-Interesse-Analysekomponente 662 konfiguriert sein kann, um die Stelle von im Wesentlichen jedem Punkt von Interesse zu identifizieren, die identifiziert werden kann. Die Komponente 662 muss nur mit der Information, die die zu analysierenden Punkte von Interesse anzeigt, und mit der Information versorgt werden, die den Typ der Information und das Format der Information anzeigt, die in den ihr zugeführten Strömen empfangen werden wird. Die oben erwähnten spezifischen Ausführungen sind nur Beispiele und sind nicht als die Anwendung dieses Merkmals der vorliegenden Erfindung einschränkend anzusehen.
  • 22 ist ein Flussdiagramm, das die Arbeitsweise der POI-Analysekomponente 662 ausführlicher veranschaulicht. Zuerst empfängt die POI-Analysekomponente 662 die Strömungsinformation. Dies wird durch 680 angezeigt. Dann zerlegt die Parsing-Komponente 670 die Strömungsinformation in ihre jeweiligen Ströme für eine Punkt-von-Interesse-Analyse. Diese wird in Block 682 angezeigt. An einem Punkt vor der Punkt-von-Interesse-Analyse muss Punkt-von-Interesse-Analyseinformation, die zu identifizierende Punkte von Interesse angibt, den verschiedenen Analysekomponenten in der POI-Analysekomponte 662 zugeführt werden. Dies wird durch Block 684 angezeigt. Die Ströme werden dann basierend auf der empfangenen Punkt-von-Interesse-Information analysiert, wie durch Block 686 angezeigt.
  • Sobald die Punkt-von-Interesse-Information aus den Strömen gewonnen ist, werden die Ströme reintegriert, und die Punkt-von-Interesse-Information wird zusammen mit den integrierten Strömen entweder in Band oder außer Band bereitgestellt. Dies wird durch Block 688 angezeigt. Der Datenstrom und die Punkt-von-Interesse-Information werden dann zur weiteren Verarbeitung an eine Stromab-Komponente (z.B. Verzögerungsfilter 112) gesendet. Es wird nomals betont, dass die Punkt-von-Interesse-Information entweder in Band oder außer Band bereitgestellt werden kann. Dies wird durch Block 690 in 22 angezeigt.
  • 23A, 23B und 23C sind ausführlichere Flussdiagramme, die die Arbeitsweise der Schriftsprachen-Analysekomponente 672, der Video-Analysekomponente 674 und der Audio-Analysekomponenten 676 veranschaulichen. 23A zeigt, dass die Schriftsprachen-Analysekomponente 672 zuerst die Schriftsprachen-Strominformation (z.B. Closed-Caption-Information) empfängt. Dies wird durch Schritt 692 angezeigt. Die Komponente 672 analysiert dann die Strominformation, um Wort- oder Satzgrenzen, bestimmte Wendungen, Zunamen oder andere Sprachteile aufzufinden. Der identifizierte Punkt von Interesse kann wieder im Wesentlichen jeder Punkt von Interesse sein, für den die Komponente 672 richtig konfiguriert ist.
  • Dies wird durch Block 694 angezeigt. Die Komponente 762 liefert dann eine Angabe der Stellen in der Strömungsinformation, wo die Punkte von Interesse liegen. Dies wird durch Block 696 angezeigt.
  • 23B ist ähnlich 23A, und ähnliche Elemente sind entsprechend nummeriert. Anstatt Textpunkte von Interesse aufzufinden, untersucht jedoch die Video-Analysekomponente 674 die Videostrominformation auf einen schwarzen Schirm, Bildänderungen (die gewünschten Szenenwechseln entsprechen können), I-, B- und P-Rahmenmarken usw. Dies wird durch Block 698 angezeigt.
  • 23C ist ähnlich 23A und 23B, und ähnliche Elemente sind ähnlich nummeriert. Anstatt Schriftsprachen- oder Videoinformation zu analysieren, untersucht jedoch die Komponente 676 Audiostrominformation. In der in 23C gezeigten Ausführung untersucht die Komponente 676 die Audiostrominformation auf Amplitudenänderungen, Satz- oder Wortgrenzen, bestimmte Inhaltswörter (z.B. Profanität), die Stimme bestimmter Personen usw.
  • Dies wird durch Block 700 angezeigt.
  • Indexerzeugung
  • Wie oben beschrieben, sind die Lesermodule 614-620 im System 610 so konfiguriert, dass sie im Puffer 124 nach jedem indexierten Punkt suchen können. Für Informationsströme, die keine Sync-Punkte haben, ist es angebracht, dass die Lesermodule nach im Wesentlichen jeder Probe im Puffer 124 suchen. In solchen Informationsströmen kann daher jede Probe indexiert werden. In einer solchen Ausführung erzeugt der Indexer 132 Indexeinträge, die einfach der gewünschten Körnigkeit des Indexers entsprechen. Zum Beispiel kann es in bestimmten Strömen erwünscht sein, Punkte zu indexieren, die zeitlich um etwa 0.25 Sekunden beabstandet sind. Bei anderer Information kann es erwünscht sein, Punkte zu indexieren, die um zwei Sekunden oder mehr beabstandet sind. Bei Informationsströmen, die keine Sync-Punkte haben, erzeugt der Indexer 132 einfach Indexeinträge, die Stellen im Puffer 124 identifizieren, die durch die gewünschte Körnigkeit des Indexers getrennt sind.
  • Wie im vorangehenden Abschnitt erörtert, werden jedoch viele Datenströme mit Sync-Punkten versehen. In diesen Fällen kann es erwünscht sein, dass der Indexer 132 Indexeinträge erzeugt, die nur Sync-Punkten entsprechen. Man wird natürlich zur Kenntnis nehmen, dass, wenn Sync-Punkte häufiger vorkommen als die gewünschte Körnigkeit des Indexgenerators, nicht jeder einzelne Sync-Punkt indexiert werden kann. Wenn jedoch Sync-Punkte weniger häufig vorkommen als die gewünschte Körnigkeit des Indexgenerators, kann im Wesentlichen jeder Sync-Punkt indexiert werden.
  • Unter einer solchen Gegebenheit kann ein Problem auftreten. Zum Beispiel mag in einer gegebenen Strömungs-Architektur der oben beschriebene Stromanalysator 654 nicht vorhanden sein, oder er mag noch nicht wissen, ob die Strömungsinformation, die er empfängt, irgendwelche Sync-Punkte enthält. Wenn dies der Fall ist, mag der Indexer zu dem Zeitpunkt, da er Strömungsinformation zu empfangen beginnt, nicht wissen, ob er einfach beginnen muss, Proben entsprechend seiner Körnigkeit zu indexieren, oder ob er warten muss, um nur Sync-Punkte zu indexieren. 24 ist ein Flussdiagramm, das die Operation des Indexers 132 beim Ansprechen dieses Problems veranschaulicht.
  • Zuerst führt der Indexer 132 einfach eine Abfrage an den Stromanalysator 654 aus, um festzustellen, ob der Stromanalysator 654 Information dahin gehend liefern kann, ob die ankommende Strömungsinformation Sync-Punkte enthält. Dies wird durch Block 702 angezeigt. Der Stromanalysator 654 mag nicht einmal eine Antwort geben, oder er mag eine Antwort geben, die anzeigt, dass er noch nicht weiss, ob die Strömungsinformation Sync-Punkte enthält. Wenn der Analysator 654 eine Antwort liefert, die anzeigt, dass Information, die angibt, ob Sync-Punkte existieren, vorhanden ist, wird ein Flag gesetzt. Das Flag wird in 24 als das "Sync-Punkt-Info-Ist-Autoritativ"-Flag bezeichnet. Dies wird durch Blöcke 703 und 704 angezeigt. Wenn keine Information vorhanden ist, die anzeigt, ob Sync-Punkte existieren, wird dieses Flag zurückgesetzt, wie durch Blöcke 703 und 705 angezeigt.
  • Als Nächstes wird, wenn Information hinsichtlich der Anwesenheit oder Abwesenheit von Sync-Punkten verfügbar ist, festgestellt, ob irgendwelche Sync-Punkte vorhanden sind. Dies wird durch Block 706 angezeigt. Wenn der Stromanalysator 654 bereits Sync-Punkte in der ankommenden Strömungsinformation identifiziert hat, versorgt er den Indexer 132 mit einer Antwort, die anzeigt, dass Sync-Punkte existieren. In diesem Fall setzt der Indexer 132 ein Sync-Punkt-Flag auf einen Wert, der angibt, dass die ankommenden Strömungsdaten in der Tat Sync-Punkte enthalten. Dies wird durch Block 707 angezeigt. Wenn jedoch der Stromanalysator 654 nicht antwortet oder er noch keine Sync-Punkte in der ankommenden Strömungsinformation lokalisiert hat, und einen Ausgang, der das anzeigt, an den Indexer 132 liefert, nimmt der Indexer 132 für den Moment an, dass es keine Sync-Punkte in der ankommenden Strömungsinformation gibt, und setzt das Sync-Punkt-Flag zurück. Dies wird durch Block 708 angezeigt. Der Indexer 132 empfängt dann eine Probe der Strömungsinformation, wie durch Block 710 angezeigt.
  • Nach Empfang der Probe untersucht der Indexer 132 die Probe, um zu sehen, ob die Probe als ein Sync-Punkt markiert ist. Dies wird durch Blöcke 712 und 714 angezeigt. Wenn die Probe nicht als ein Sync-Punkt markiert wurde, untersucht der Indexer 132 das Sync-Punkt-Flag, um zu sehen, ob das Sync-Punkt-Flag gesetzt ist. Dies wird durch Block 716 angedeutet. Wenn in Block 716 festgestellt wird, dass das Sync-Punkt-Flag tatsächlich gesetzt ist, zeigt dies an, dass die Strömungsinformation, die verarbeitet wird, Sync-Punkte enthält, und die vorliegende Probe wird nicht als Sync-Punkt markiert. Der Indexer 132 indexiert daher die untersuchte Probe nicht, sondern kehrt einfach zu der Verarbeitung in Block 710 zurück.
  • Wenn aber in Block 716 festgestellt wird, dass das Sync-Punkt-Flag nicht gesetzt ist, nimmt der Indexer 132 noch an, dass in der ankommenden Strömungsinformation keine Sync-Punkte vorhanden sind. Der Indexer stellt daher einfach fest, ob er die gegenwärtige untersuchte Probe basierend auf der gewünschten Körnigkeit des Indexers 132 indexieren sollte. Mit anderen Worten, wenn der Indexer 132 Punkte nicht öfter als (zum Beispiel) alle halbe Sekunde indexieren soll, stellt der Indexer 132 fest, ob die gegenwärtige Probe von der zuvor indexierten Probe um wenigstens eine halbe Sekunde zeitlich entfernt ist. Wenn ja, wird die gegenwärtige Probe indexiert. Wenn nicht, kehrt die Verarbeitung einfach zu Block 710 zurück. Dies wird durch Block 718 angedeutet.
  • Wenn der Indexer 132 in Block 714 feststellt, dass die vorliegende Probe als ein Sync-Punkt markiert ist, dann stellt der Indexer 132 fest, ob das Sync-Punkt-Flag gegenwärtig gesetzt ist. Dies wird durch Block 720 angedeutet. Wenn das Sync-Punkt-Flag gegenwärtig gesetzt ist, setzt der Indexer 132 einfach die Verarbeitung in Block 718 fort und stellt fest, ob er genügend zeitlichen Abstand von dem vorherigen Indexeintrag erreicht hat, um den gegenwärti-Sync-Punkt zu indexieren.
  • Wenn aber in Block 720 festgestellt wird, dass, obwohl die vorliegende Probe als ein Sync-Punkt markiert ist, das Sync-Punkt-Flag nicht gesetzt ist, stellt der Indexer 132 in Block 721 fest, ob das Flag "Sync-Punkt-Info-Ist-Autoritativ" gesetzt ist. Wenn nicht, erkennt der Indexer 132, dass er der Annahme war, dass in der untersuchten Strömungsinformation keine Sync-Punkte existieren, aber er erkennt auch, dass Sync-Punkte tatsächlich existieren. Der Indexer 132 wirft daher alle vorangehenden Indexeinträge weg (da sie Nicht-Syny-Punkt-Proben entsprechen), wie in Block 722 angezeigt, und setzt das Sync-Punkt-Flag, wie durch Block 724 angegeben. Die Verarbeitung wird dann in Block 718 fortgesetzt. Desgleichen wird, wenn in Block 721 festgestellt wird, dass das Flag "Sync-Punkt-Info-Ist-Autoritativ" gesetzt ist, die Verarbeitung in Block 718 fortgesetzt.
  • Es ist daher zu ersehen, dass unter Verwendung des in 24 veranschaulichten Algorithmusses dieses Merkmal der vorliegenden Erfindung benutzt werden kann, um Punkte in der Strömungsinformation genau zu indexieren, unabhängig davon, ob der Indexer augenblicklich weiß, ob Sync-Punkte in der Strömungsinformation vorhanden sind. Wo Sync-Punkte nicht vorhanden sind, werden Proben entsprechend der gewünschten Körnigkeit des Indexers indexiert. Wenn Sync-Punkte vorhanden sind, werden nur Sync-Punkte indexiert.
  • Zeitverschobenes Suchen mit Mehrfachströmen
  • Wie oben beschrieben, kann die im Puffer 124 gespeicherte Strömungsinformation mehrfache Ströme enthalten. Wie ebenfalls oben beschrieben, kann es erwünscht sein, Lesermodulen 614-620 (gezeigt in 20) zu gestatten, nach verschiedenen durch den Indexer 132 indexierten Punkten in der Strömungsinformation zu suchen. Dies wirft eine Schwierigkeit auf. Es ist schwierig, zu entscheiden, bei welchem einzelnen Dateioffset im Puffer 124 das einzelne Lesermodul zu lesen beginnen sollte, nachdem ein Suchen verlangt wurde. Diese Entscheidung wird durch eine Anzahl von Faktoren erschwert.
  • Zum Beispiel können die Ströme innerhalb der im Puffer 124 befindlichen Datei außer Synchronisation sein. Mit anderen Worten, Audioinformation kann vor oder hinter Videoinformation und in verschieden großen Speicherblöcken gespeichert sein, sodass die zwei nicht direkt übereinstimmen. Auch kann das Lesermodul verlangen, nach einer Stelle im Puffer 124 zu suchen (nach einer Probe mit einem bestimmten Zeitstempel), für die kein Sync-Punkt indexiert wurde. Mit anderen Worten, wie oben dargelegt, indexiert der Indexer 132 nicht jede einzelne Probe. Stattdessen indexiert er nur basierend auf seiner eigenen Körnigkeit oder basierend auf Sync-Punkten. Ein Lesermodul kann daher verlangen, nach einem Zeitstempel zu suchen, für den kein Indexeintrag vorhanden ist. Des Weiteren können einige Ströme Sync-Punkte enthalten und andere nicht. Außerdem können nicht alle Sync-Punkte indexiert werden, da sie häufiger vorkommen können als die gewünschte Körnigkeit des Indexers. Ein erklärendes Merkmal der vorliegenden Erfindung ist auf das Ansprechen dieser Hindernisse beim Suchen durch einen Kanal mit mehrfachen Strömen gerichtet.
  • 25 ist eine exemplarische Darstellung eines Teils des Puffers 124, der in eine Vielzahl von gepufferten Proben geteilt ist. Proben 730 mit Schraffierung in einer ersten Richtung stellen Proben eines ersten Stroms dar. Proben mit Schraffierung in der entgegengesetzten Richtung stellen Proben eines zweiten Stroms dar. Proben 734A. 734B, 734C und 734D, ohne Schraffur, entsprechen Proben eines dritten Stroms.
  • Um die oben genannten Hindernisse anzusprechen, ist eine erklärende Ausführung der vorliegenden Erfindung ein Suchalgorithmus, der mit Verweis auf 25 und 26 beschrieben wird. In dem Algorithmus sucht ein bestimmtes Lesermodul, das eine Suche durchführt, nach einem höchsten Dateiversatz im Puffer 124, der geeignet ist, die einzelnen Suchanforderungen jedes Stroms zu erfüllen. Das Lesermodul beginnt dann, Information strömen zu lassen, lässt aber Information für jeden der gerade gelesenen Ströme, die vor der ersten Probe gelesen wird, die tatsächlich für diesen Strom gespielt werden sollte, fallen. Außerdem wird, wo keine Sync-Punkte mit dem genauen Zeitstempel indexiert wurden, der nächste Sync-Punkt vor der gewünschten Suchposition als ein möglicher Startpunkt bereitgestellt, sofern nicht der nächste Sync-Punkt vor der gewünschten Suchposition zu weit zurückliegt. Da einige Ströme keine Sync-Punkte enthalten, nimmt die vorliegende Erfindung an, dass in einem Strom ohne Sync-Punkte jede Probe ein Sync-Punkt ist. Da nicht alle Sync-Punkte indexiert werden können, findet schließlich der Suchalgorithmus zuerst einen nächsten indexierten Sync-Punkt vor und hinter der gewünschten Suchposition und ermittelt dann die Differenz zwischen den zwei indexierten Suchpunkten, um zu sehen, ob sich weitere, nicht indexierte Sync-Punkte zwischen den zwei befinden können. Wenn ja, werden die Daten zwischen den zwei indexierten Sync-Punkten gelesen, um festzustellen, ob weitere Sync-Punkte (und solche, die näher an dem gewünschten Suchpunkt liegen) vorhanden sind.
  • 26 ist ein Flussdiagramm, das eine Suchoperation nach einem erklärenden Merkmal der vorliegenden Erfindung veranschaulicht. Um nach einer Position im Puffer 124 (gezeigt in 25) zu suchen, empfängt das auserwählte Lesermodul zuerst eine Suchanforderung, um nach einer Stelle im Puffer 124 mit einem Zeitstempel, der Zeit T angibt, zu suchen. Dies wird durch Block 740 angedeutet. In 25 entspricht der Zeitstempel T der Probe 734C. In der erklärenden Ausführung ist Probe 734C nicht indexiert.
  • Als Nächstes wird eine Variable FILEOFFSET auf unendlich (oder eine sehr große Zahl) ge setzt. Dies wird durch Block 742 angedeutet.
  • Dann wird der erste der Vielzahl von Strömen zur Analyse ausgewählt. Dies wird durch Block 744 gezeigt.
  • Für den ersten Strom wird eine Zeitvariable T1 auf den Indexeintrag mit dem höchsten Zeitstempel vor der gewünschten Suchzeit T gesetzt. In 25 ist zu sehen, dass die Probe 734A für den auserwählten Strom dem Indexeintrag T1 entspricht, der den höchsten Zeitstempel vor der gewünschten Suchzeit T hat. Wenn kein derartiger Indexeintrag vorhanden ist, wird T1 auf T-Z gesetzt. In einer erklärenden Ausführung ist Z = 100. Dies bewirkt im Grunde, dass T1 weggeworfen wird, wie in späterer Verarbeitung veranschaulicht wird. Dies wird durch Block 746 gezeigt.
  • Als Nächstes wird ein Zeitabschnitt T2 für den ausgewählten Strom auf einen Indexeintrag mit dem niedrigsten Zeitstempel nach der gewünschten Suchzeit T gesetzt. Man kann sehen, dass die Probe 734D einer Probe in dem ausgewählten Strom entspricht, die indexiert ist und den niedrigsten Zeitstempel rechts von Zeit T hat (z.B. nach nach Zeit T). Wenn ein solcher Eintrag nicht existiert, wird der gegenwärtig ausgewählte Strom für Zwecke des Berechnens des Dateiversatzes ignoriert, und ein neuer Strom wird ausgewählt. Dies wird durch Block 748 gezeigt.
  • Nach der Verarbeitung in Block 748 ist somit zu sehen, dass die zwei Indexeinträge, die auf beiden Seiten von Zeit T liegen und Zeit T am nächsten sind, identifiziert wurden. Diese Indexeinträge entsprechen den Zeiten T1 und T2. Der zeitliche Versatz zwischen der gewüschten Zeit T und der vorangehend indexierten Zeit T1 wird durch X = T – T1 dargestellt. Der zeitliche Versatz zwischen der gewünschten Suchzeit T und dem nachfolgenden Indexeintrag T2 wird durch Y = T2 – T dargestellt.
  • Wenn sowohl X als auch Y größer als ein vorbestimmtes Zeitintervall (z.B. 5 Sekunden) sind, zeigt dies an, dass beide indexierten Proben T1 und T2 zu weit von der gewünschten Suchposition T entfernt sind, um hilfreich sein. Diese Feststellung wird durch Block 750 angedeutet. Wenn es der Fall ist, dass X und Y größer als das vorbestimmte Zeitintervall sind, wird der vorliegende Strom zum Berechnen von FILEOFFSET einfach ignoriert. Dies wird durch Block 752 angegeben. Die Verarbeitung geht dann in Block 754 weiter, wo festgestellt wird, ob weitere Ströme vorhanden sind. Wenn ja, wird in Block 756 ein neuer Strom ausgewählt, und die Verarbeitung geht in Bezug auf Block 746 weiter. Wenn keine weiteren Ströme vorhanden sind, wird in Block 758 eine Suche durchgeführt, die unten ausführlicher beschrieben wird.
  • Wenn in Block 750 festgestellt wird, dass beide Werte X und Y nicht größer als das vorbestimmte Zeitintervall sind, wird festgestellt, ob entweder X oder Y größer als das vorbestimmte Zeitintervall ist. Zum Beispiel wird in Block 760 festgestellt, ob der Wert X (der T – T1 entspricht) größer als fünf Sekunden ist. Wenn ja, darf der Wert Y nicht größer als fünf Sekunden sein, und eine Variable FILE_OFFSET_THIS_STREAM wird auf den Indexwert T2 gesetzt. Dies wird durch Block 762 angezeigt.
  • Wenn in Block 760 festgestellt wird, dass der Wert X nicht größer als fünf Sekunden ist, wird festgestellt, ob der Wert Y größer als fünf Sekunden ist. Wenn ja, kann der Wert T2 ignoriert werden, und die Variable FILE_OFFSET_THIS_STREAM wird auf den Wert T1 gesetzt. Dies wird durch Blöcke 764 und 766 angezeigt.
  • Im Grunde stellen die Blöcke 760-766 fest, ob entweder der Indexwert T1 oder T2 zu weit von der gewünschten Suchzeit T getrennt ist, um hilfreich zu sein. Wenn dies der Fall ist, werden sie von weiterer Berechnung ausgeschlossen.
  • Wenn aber in Block 764 festgestellt wird, dass der Wert Y nicht größer als fünf Sekunden ist, heißt das, dass beide Proben, die den Werten T1 und T2 entsprechen, nahe genug an der gewünschten Suchzeit T liegen, um von Interesse zu sein. Wenn das der Fall ist, wird festgestellt, ob andere Sync-Punkte zwischen T1 und T2 vorhanden sein können. Mit anderen Worten, wenn ein Abstand zwischen T1 und T2 so klein ist, dass keine anderen Sync-Punkte zwischen ihnen indexiert werden konnten (basierend auf der gewünschten Körnigkeit des Indexers), dann können weitere Sync-Punkte zwischen den Proben T1 und T2 existieren, die näher an der gewünschten Suchposition T liegen, aber einfach aus dem Index weggelassen wurden, weil die Körnigkeit des Indexers nicht ausreichend war, um einen zusätzlichen Indexeintrag unterzubringen.
  • Deshalb wird ein Suchalgorithmus durchgeführt, bei dem die Proben des ausgewählten Stromes, die zwischen den Proben T und T1 liegen, gesucht werden, um festzustellen, ob sie in der Tat Sync-Punkte sind. Wenn ja, würde das bedeuten, dass diese Sync-Punkte zeitlich näher an der gewünschten Suchposition T und zeitlich vor dieser Suchposition liegen. Wenn dies zutrifft, wird die Variable FILE_OFFSET_THIS_STREAM auf den Wert gesetzt, der diesem identifizierten Sync-Punkt entspricht. Dies wird durch Blöcke 768 und 770 gezeigt.
  • Daher ist an diesem Punkt in der Verarbeitung der gewünschte Dateioffset für den gerade untersuchten Strom entweder als T1, T2 oder als ein Wert zwischen T1 und T gewählt worden. Für den gerade untersuchten Strom fordert daher der Suchalgorithmus nachfolgende Filter in dem Strömungsprozess auf, alle Datenproben, die aus dem Puffer 124 ausgelesen werden und Zeitstempel vor dem durch die Variable FILE_OFFSET_THIS_STREAM identifizierten haben, zu ignorieren. Dies wird durch Block 772 angezeigt.
  • Sobald die Variable FILE_OFFSET_THIS_STREAM gewonnen ist, wird festgestellt, ob dieser Wert kleiner als der momentane Wert der Variablen FILEOFFSET ist. Wenn dies der erste ausgewählte Strom ist, wird der Wert kleiner sein als der momentane Wert von FILEOFFSET, der auf undendlich gesetzt wurde. Wenn dies aber ein zweiter, dritter oder später ausgewählter Strom war, wird der Dateioffset für den vorliegenden untersuchten Strom als der Wert für die Variable FILEOFFSET nur benutzt, wenn er weiter links (oder zeitlich früher) als der momentane Wert für die Variable FILEOFFSET liegt. Dies hat die Wirkung, dass der Suchpunkt, der tatsächlich beim Suchen im Puffer 124 benutzt werden wird, zu einem Punkt weit genug links im Puffer bewegt wird, um die einzelnen Suchanforderungen jedes Stroms zu erfüllen. Dies wird durch Block 774 angezeigt.
  • Die Verarbeitung geht dann in Bock 754 weiter, wo festgestellt wird, ob weitere Ströme untersucht werden müssen. Wenn ja, geht die Verarbeitung in Block 756 weiter. Wenn nicht, geht die Verarbeitung in Block 758 weiter. In Block 758 wird das ausgewählte Lesermodul angewiesen, nach der durch die Variable FILEOFFSET identifitierten Probe zu suchen und an diesem Punkt mit dem Strömen von Daten aus dem Puffer 124 zu beginnen. Da in Block 772 ein Wert für jeden Strom gesetzt wurde, der anzeigt, dass vor dem gewünschten Sync-Punkt für diesen Strom geströmte Daten zu ignorieren sind, werden die aus dem Puffer 124 geströmten Daten für einen gegebenen Strom erst wiedergegeben, wenn diese Daten mit dem oder nach dem für diesen gegebenen Strom identifizierten (und durch die Variable FILE_OFFSET_THIS_STREAM identifizierten) Sync-Punkt übereinstimmen.
  • Eine Ausführung von Pseudocode, der dem Flussdiagramm von 26 entspricht, wird unten dargelegt.
  • Figure 00490001
  • Suche durch den Teil der Datei zwischen FileOffset (T1) und FileOffset (T2), um den Sync-Punkt mit dem höchsten Zeitstempel zu finden, der noch unter T ist.
  • Die Position dieses Sync-Punkts wird FileOffsetForThisStream.
  • Dann sage dem Splitter, alle Proben für diesen Strom wegzuwerfen, deren Zeitstempel kleiner sind als der, den wir gerade gefunden haben.
  • Figure 00490002
  • Es ist somit sehen, dass der in 26 veranschaulichte Algorithmus eine Anzahl von Problemen löst. In Bezug auf Ströme, die in einer Datei außer Synchronisation sein können, sucht der Algorithmus nach dem höchsten Dateiversatz, der geeignet ist, die einzelnen Suchanforderungen jedes Stroms zu erfüllen. Das Lesermodul beginnt dann an diesem Punkt das Strömen, lässt aber alles vor der ersten Probe, die tatsächlich für jeden gegebenen Strom gespielt werden sollte, fallen. Desgleichen wird, wo kein Sync-Punkt mit dem genauen gewünschten Zeitstempel (die gewünschte Suchposition) vorhanden ist, die Suchposition auf den nächsten Sync-Punkt vor der gewünschten Suchposition gesetzt, sofern der nächste Sync-Punkt nicht zu weit nach links (in der Vergangenheit) liegt. Da außerdem einige Ströme Suchpunkte enthalten können und andere nicht, wird jede Probe in einem Strom ohne Suchpunkte als ein geeigneter Suchpunkt angesehen. Schließlich, da nicht alle Suchpunkte indexiert werden können, findet der Suchalgorithmus die nächsten indexierten Suchpunkte vor und hinter der gewünsten Suchposition und schaut dann auf die Differenz zwischen diesen indexierten Punkten, um festzustellen, ob irgendwelche Sync-Punkte zwischen ihnen liegen können. Wenn ja, werden die Proben links von der gewünschten Suchposition gelesen, um nach zusätzlichen Sync-Punkten zu suchen.
  • Obwohl die vorliegende Erfindung mit Verweis auf bevorzugte Ausführungen beschrieben wurde, werden Fachleute in Technik erkennen, dass Änderungen in Form und Detail vorgenommen werden können, ohne vom Umfang der Erfindung abzuweichen.

Claims (9)

  1. Computerlesbares Medium, das mit einer Datenstruktur für Streaming-Informationen codiert ist, die eine Vielzahl von Strömen umfasst, wobei die Vielzahl von Strömen von einem Audio-Strom, einem Video-Strom und einem Daten-Strom, die zusammen einen einzelnen Kanal von Inhaltsinformationen von einer Mehrfachstrom-Streaming-Informationsquelle umfassen, wenigstens zwei enthalten und die Datenstruktur umfasst: eine Sequenz von Datenblöcken für die Vielzahl von Strömen (532A-532C; 534A, 534B; 536A, 536B), wobei Datenblöcke für verschiedene Ströme in der Sequenz aneinander grenzen und so den einzelnen Kanal bilden, und wobei jeder Datenblock mit einem Strom der Vielzahl von Strömen verknüpft ist und enthält: ein erstes Zeiger-Feld (512), das eine Position eines folgenden Datenblocks anzeigt, der mit dem einen Strom verknüpft ist; ein zweites Zeiger-Feld (520), das eine Position eines vorangehenden Datenblocks anzeigt, der mit dem einen Strom verknüpft ist; und ein Nutzdatenfeld (540), wobei wenigstens das erste oder das zweite Zeiger-Feld ein Feld variabler Länge ist, das Fülldaten enthält, um die Größe der Datenblöcke auf eine vorgegebene Länge einzustellen.
  2. Computerlesbares Medium nach Anspruch 1, wobei das Nutzdaten-Feld durch das erste Zeiger-Feld und das zweite Zeiger-Feld begrenzt wird.
  3. Computerlesbares Medium nach Anspruch 1 oder 2, wobei das Nutzdaten-Feld eine variable Größe hat.
  4. Computerlesbares Medium nach einem der Ansprüche 1 bis 3, wobei sich das erste Zeiger-Feld an einer bekannten Position von einem Anfang des Datenblocks aus befindet und sich das zweite Zeiger-Feld an einer bekannten Position von einem Ende des Datenblocks aus befindet.
  5. Computerlesbares Medium nach einem der Ansprüche 1 bis 4, wobei jeder Datenblock des Weiteren umfasst: ein erstes Datenblock-Größenfeld, das die Größe des Datenblocks anzeigt, ein zweites Datenblock-Größenfeld, das die Größe des Datenblocks anzeigt; und wobei das Nutzdatenfeld durch das erste Datenblock-Größenfeld und das zweite Datenblock-Größenfeld begrenzt wird.
  6. Computerlesbares Medium nach einem der Ansprüche 1 bis 5, wobei das Nutzdaten-Feld Streaming-Informationen enthält, die aus der Vielzahl von Strömen wiederzugeben sind.
  7. Computerlesbares Medium nach einem der Ansprüche 1 bis 6, wobei das erste Zeiger-Feld ein Präfix-Feld ist und das zweite Zeiger-Feld ein Suffix-Feld ist.
  8. Computerlesbares Medium nach einem der Ansprüche 1 bis 7, wobei die Sequenz von Datenblöcken des Weiteren Auffüll-Datenblöcke (558, 560) umfasst, die keine Streaming-Informationen enthalten und eine Größe haben, die so ausgewählt ist, dass sie definierte Mediengrenzen (562A, 562B) einhält.
  9. Computerlesbares Medium nach einem der Ansprüche 1 bis 8, das ein Ringpuffer Puffer (124) ist.
DE60036036T 1999-04-06 2000-03-29 Datenformat für einen Informationenstromempfänger Expired - Lifetime DE60036036T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/286,747 US6820144B2 (en) 1999-04-06 1999-04-06 Data format for a streaming information appliance
US286747 1999-04-06

Publications (2)

Publication Number Publication Date
DE60036036D1 DE60036036D1 (de) 2007-09-27
DE60036036T2 true DE60036036T2 (de) 2007-12-06

Family

ID=23099996

Family Applications (2)

Application Number Title Priority Date Filing Date
DE60036036T Expired - Lifetime DE60036036T2 (de) 1999-04-06 2000-03-29 Datenformat für einen Informationenstromempfänger
DE60013110T Expired - Lifetime DE60013110T2 (de) 1999-04-06 2000-03-29 Datenformat für einen informationenstromempfänger

Family Applications After (1)

Application Number Title Priority Date Filing Date
DE60013110T Expired - Lifetime DE60013110T2 (de) 1999-04-06 2000-03-29 Datenformat für einen informationenstromempfänger

Country Status (8)

Country Link
US (2) US6820144B2 (de)
EP (2) EP1169862B1 (de)
JP (1) JP4491151B2 (de)
AT (2) ATE274275T1 (de)
AU (1) AU4179700A (de)
DE (2) DE60036036T2 (de)
HK (2) HK1043274B (de)
WO (1) WO2000060873A1 (de)

Families Citing this family (86)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4074036B2 (ja) * 1999-09-29 2008-04-09 株式会社東芝 無線通信端末
GB2359209A (en) * 2000-02-09 2001-08-15 Motorola Ltd Apparatus and methods for video distribution via networks
US6985966B1 (en) * 2000-03-29 2006-01-10 Microsoft Corporation Resynchronizing globally unsynchronized multimedia streams
US7133837B1 (en) * 2000-06-29 2006-11-07 Barnes Jr Melvin L Method and apparatus for providing communication transmissions
US7487112B2 (en) 2000-06-29 2009-02-03 Barnes Jr Melvin L System, method, and computer program product for providing location based services and mobile e-commerce
US7657149B2 (en) * 2000-12-22 2010-02-02 Keen Personal Media, Inc. Method and apparatus for storing a stream of video data on a storage medium
US7228375B1 (en) * 2001-01-12 2007-06-05 Slt Logic, Llc System and method for efficient input/output of a computer system
US20020122656A1 (en) * 2001-03-05 2002-09-05 Gates Matthijs A. Method and apparatus for recording broadcast data
US8965175B2 (en) * 2001-04-09 2015-02-24 Monitoring Technology Corporation Data recording and playback system and method
US7174384B2 (en) * 2001-07-31 2007-02-06 Dinastech Ipr Limited Method for delivering large amounts of data with interactivity in an on-demand system
US7240350B1 (en) 2002-01-07 2007-07-03 Slt Logic, Llc System and method for providing communications to processes
US7899924B2 (en) * 2002-04-19 2011-03-01 Oesterreicher Richard T Flexible streaming hardware
US20040006636A1 (en) * 2002-04-19 2004-01-08 Oesterreicher Richard T. Optimized digital media delivery engine
US6905414B2 (en) * 2002-05-16 2005-06-14 Microsoft Corporation Banning verbal communication to and from a selected party in a game playing system
US8611919B2 (en) 2002-05-23 2013-12-17 Wounder Gmbh., Llc System, method, and computer program product for providing location based services and mobile e-commerce
US10489449B2 (en) 2002-05-23 2019-11-26 Gula Consulting Limited Liability Company Computer accepting voice input and/or generating audible output
AU2003268521A1 (en) 2002-09-05 2004-03-29 Thomson Licensing S.A. A method and system for memory pvr functions in a broadcast environment
US7386619B1 (en) * 2003-01-06 2008-06-10 Slt Logic, Llc System and method for allocating communications to processors in a multiprocessor system
US7555540B2 (en) * 2003-06-25 2009-06-30 Microsoft Corporation Media foundation media processor
US7613767B2 (en) 2003-07-11 2009-11-03 Microsoft Corporation Resolving a distributed topology to stream data
US7733962B2 (en) 2003-12-08 2010-06-08 Microsoft Corporation Reconstructed frame caching
US7712108B2 (en) * 2003-12-08 2010-05-04 Microsoft Corporation Media processing methods, systems and application program interfaces
US7900140B2 (en) * 2003-12-08 2011-03-01 Microsoft Corporation Media processing methods, systems and application program interfaces
US7735096B2 (en) * 2003-12-11 2010-06-08 Microsoft Corporation Destination application program interfaces
US20050185718A1 (en) * 2004-02-09 2005-08-25 Microsoft Corporation Pipeline quality control
US7934159B1 (en) 2004-02-19 2011-04-26 Microsoft Corporation Media timeline
US7941739B1 (en) 2004-02-19 2011-05-10 Microsoft Corporation Timeline source
US7664882B2 (en) * 2004-02-21 2010-02-16 Microsoft Corporation System and method for accessing multimedia content
US7577940B2 (en) * 2004-03-08 2009-08-18 Microsoft Corporation Managing topology changes in media applications
US7609653B2 (en) 2004-03-08 2009-10-27 Microsoft Corporation Resolving partial media topologies
US7669206B2 (en) * 2004-04-20 2010-02-23 Microsoft Corporation Dynamic redirection of streaming media between computing devices
WO2005117394A1 (en) * 2004-05-17 2005-12-08 Eventide Inc. Network-based control of audio/video stream processing
JP4729570B2 (ja) * 2004-07-23 2011-07-20 ビーチ・アンリミテッド・エルエルシー トリックモードおよび速度移行
FR2875042B1 (fr) 2004-09-03 2006-11-24 Canon Kk Procede et dispositif d'acces aleatoire a une zone d'une image codee en vue de la decoder et procede et dispositif de codage d'une image
US7590750B2 (en) 2004-09-10 2009-09-15 Microsoft Corporation Systems and methods for multimedia remoting over terminal server connections
US8195037B2 (en) * 2004-11-12 2012-06-05 Pelco, Inc. Apparatus and method of storing video data
US7302159B2 (en) * 2004-11-12 2007-11-27 Pelco Apparatus and method of storing video data
US8903760B2 (en) * 2004-11-12 2014-12-02 International Business Machines Corporation Method and system for information workflows
US20090025046A1 (en) * 2005-03-09 2009-01-22 Wond, Llc Hybrid architecture for media services
US7937379B2 (en) * 2005-03-09 2011-05-03 Vudu, Inc. Fragmentation of a file for instant access
US8904463B2 (en) * 2005-03-09 2014-12-02 Vudu, Inc. Live video broadcasting on distributed networks
US7191215B2 (en) * 2005-03-09 2007-03-13 Marquee, Inc. Method and system for providing instantaneous media-on-demand services by transmitting contents in pieces from client machines
US9176955B2 (en) * 2005-03-09 2015-11-03 Vvond, Inc. Method and apparatus for sharing media files among network nodes
US8219635B2 (en) * 2005-03-09 2012-07-10 Vudu, Inc. Continuous data feeding in a distributed environment
US7698451B2 (en) 2005-03-09 2010-04-13 Vudu, Inc. Method and apparatus for instant playback of a movie title
US20080022343A1 (en) * 2006-07-24 2008-01-24 Vvond, Inc. Multiple audio streams
US20090019468A1 (en) * 2005-03-09 2009-01-15 Vvond, Llc Access control of media services over an open network
US7516255B1 (en) 2005-03-30 2009-04-07 Teradici Corporation Method and apparatus for providing a low-latency connection between a data processor and a remote graphical user interface over a network
US8560753B1 (en) 2005-03-30 2013-10-15 Teradici Corporation Method and apparatus for remote input/output in a computer system
US7711916B2 (en) * 2005-05-11 2010-05-04 Oracle International Corporation Storing information on storage devices having different performance capabilities with a storage system
US8099511B1 (en) 2005-06-11 2012-01-17 Vudu, Inc. Instantaneous media-on-demand
US7509021B2 (en) * 2005-06-27 2009-03-24 Streaming Networks (Pvt.) Ltd. Method and system for providing instant replay
US7783653B1 (en) * 2005-06-30 2010-08-24 Adobe Systems Incorporated Fast seek in streaming media
WO2007095127A1 (en) * 2006-02-10 2007-08-23 Qualcomm Mems Technologies, Inc. Method and system for updating of displays showing deterministic content
US8069461B2 (en) 2006-03-30 2011-11-29 Verizon Services Corp. On-screen program guide with interactive programming recommendations
US20070263980A1 (en) * 2006-05-09 2007-11-15 Jaan-Huei Chen Method of transitioning from time shifted multimedia playback to live multimedia playback and multimedia playback device thereof
US20080031587A1 (en) * 2006-08-02 2008-02-07 Chia-Hung Chen Methods for searching data recorded in a storage and recording systems that allow playback utilizing trick-mode operations
US8296812B1 (en) 2006-09-01 2012-10-23 Vudu, Inc. Streaming video using erasure encoding
JP2008066863A (ja) * 2006-09-05 2008-03-21 Funai Electric Co Ltd 映像記録装置
US8418217B2 (en) 2006-09-06 2013-04-09 Verizon Patent And Licensing Inc. Systems and methods for accessing media content
US8566874B2 (en) 2006-10-03 2013-10-22 Verizon Patent And Licensing Inc. Control tools for media content access systems and methods
US8464295B2 (en) 2006-10-03 2013-06-11 Verizon Patent And Licensing Inc. Interactive search graphical user interface systems and methods
US8120613B2 (en) * 2006-11-29 2012-02-21 Siemens Medical Solutions Usa, Inc. Method and apparatus for real-time digital image acquisition, storage, and retrieval
US8510780B2 (en) 2006-12-21 2013-08-13 Verizon Patent And Licensing Inc. Program guide navigation tools for media content access systems and methods
US8028313B2 (en) 2006-12-21 2011-09-27 Verizon Patent And Licensing Inc. Linear program guide for media content access systems and methods
US8015581B2 (en) 2007-01-05 2011-09-06 Verizon Patent And Licensing Inc. Resource data configuration for media content access systems and methods
US8103965B2 (en) 2007-06-28 2012-01-24 Verizon Patent And Licensing Inc. Media content recording and healing statuses
TWI336265B (en) * 2007-11-23 2011-01-21 Mstar Semiconductor Inc Command distribution method and multimedia apparatus and system using the same for playing game
US8051447B2 (en) 2007-12-19 2011-11-01 Verizon Patent And Licensing Inc. Condensed program guide for media content access systems and methods
US8325800B2 (en) 2008-05-07 2012-12-04 Microsoft Corporation Encoding streaming media as a high bit rate layer, a low bit rate layer, and one or more intermediate bit rate layers
US8379851B2 (en) * 2008-05-12 2013-02-19 Microsoft Corporation Optimized client side rate control and indexed file layout for streaming media
US7925774B2 (en) 2008-05-30 2011-04-12 Microsoft Corporation Media streaming using an index file
US8055784B2 (en) * 2008-07-07 2011-11-08 Disney Enterprises, Inc. Content navigation module for managing delivery of content to computing devices and method therefor
US8265140B2 (en) * 2008-09-30 2012-09-11 Microsoft Corporation Fine-grained client-side control of scalable media delivery
US20110040761A1 (en) * 2009-08-12 2011-02-17 Globalspec, Inc. Estimation of postings list length in a search system using an approximation table
US7702805B1 (en) 2009-10-05 2010-04-20 Adobe Systems Incorporated Streaming media seek
KR101001010B1 (ko) * 2010-06-09 2010-12-15 주식회사 위즈메타 더블 버퍼링을 이용한 색인 기반 동영상 재생 장치 및 방법
US8667248B1 (en) * 2010-08-31 2014-03-04 Western Digital Technologies, Inc. Data storage device using metadata and mapping table to identify valid user data on non-volatile media
US9270718B2 (en) * 2011-11-25 2016-02-23 Harry E Emerson, III Internet streaming and the presentation of dynamic content
US9826015B2 (en) * 2013-09-04 2017-11-21 Qualcomm Incorporated Dynamic and automatic control of latency buffering for audio/video streaming
US20150110455A1 (en) * 2013-10-23 2015-04-23 Nvidia Corporation Utility and method for capturing computer-generated video output
US10204044B2 (en) * 2016-05-18 2019-02-12 Sap Se Memory management process using data sheet
US9946489B2 (en) 2016-07-27 2018-04-17 Western Digital Technologies, Inc. Multi-stream journaled replay
US10809889B2 (en) * 2018-03-06 2020-10-20 Sony Corporation Live interactive event indication based on notification profile for display device
US10636495B2 (en) 2018-06-12 2020-04-28 Western Digital Technologies, Inc. Adjustable read retry order based on decoding success trend
DE102018221712B4 (de) * 2018-12-13 2022-09-22 Volkswagen Aktiengesellschaft Verfahren zum Betreiben eines interaktiven Informationssystems für ein Fahrzeug, sowie ein Fahrzeug

Family Cites Families (65)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63129563A (ja) * 1986-11-19 1988-06-01 Mitsubishi Electric Corp デイスク装置の欠陥セクタ代替方式
US4896261A (en) * 1986-11-24 1990-01-23 Motorola Inc. System for scheduling serial message transmission on a bus which is adoptable for rescheduling prioritized messages using a doubly-linked list
JPS647379A (en) * 1987-06-30 1989-01-11 Nec Corp Magnetic tape processor
DE3785043D1 (de) 1987-10-06 1993-04-29 Itt Ind Gmbh Deutsche Digitaler fifo-speicher.
JP2600373B2 (ja) * 1989-05-11 1997-04-16 松下電器産業株式会社 光ディスク記録再生装置
US5339418A (en) 1989-06-29 1994-08-16 Digital Equipment Corporation Message passing method
US5136655A (en) 1990-03-26 1992-08-04 Hewlett-Pacard Company Method and apparatus for indexing and retrieving audio-video data
US5371842A (en) 1990-04-19 1994-12-06 Bioscience Analysis Software Ltd. System for real-time display of the waveshape of an incoming stream of digital data samples
US5165021A (en) * 1991-01-18 1992-11-17 Racal-Datacom, Inc. Transmit queue with loadsheding
US5321824A (en) * 1991-04-22 1994-06-14 International Business Machines Corporation Accessing last recorded data in a continuation chain
US5566301A (en) 1992-02-11 1996-10-15 Futuretel, Inc. ISDN audiovisual teleservices interface subsystem
US5371551A (en) 1992-10-29 1994-12-06 Logan; James Time delayed digital video system using concurrent recording and playback
JP3431030B2 (ja) * 1992-11-12 2003-07-28 ソニー株式会社 再生装置および再生方法
US5442390A (en) 1993-07-07 1995-08-15 Digital Equipment Corporation Video on demand with memory accessing and or like functions
CA2127347A1 (en) 1993-07-07 1995-01-08 Donald F. Hooper Segmented video on-demand system
US5414455A (en) 1993-07-07 1995-05-09 Digital Equipment Corporation Segmented video on demand system
DE4323521A1 (de) 1993-07-14 1995-01-19 Sel Alcatel Ag Verfahren zum Umsetzen eines parallelisierten, zeitlich gemultiplexten Datenstroms in einzelne serielle Datenströme und umgekehrt, sowie Umsetzer dafür
US5878280A (en) 1993-09-23 1999-03-02 Philips Electronics North America Corp. Data buffering system for plural data memory arrays
ES2155857T3 (es) 1993-10-29 2001-06-01 Time Warner Entertainm Co Lp Sistema para controlar la reproduccion de multiples versiones de una misma pelicula cinematografica almacenadas en un disco optico.
EP0654740A1 (de) * 1993-11-22 1995-05-24 Siemens Aktiengesellschaft Bussteuerung
JPH07219970A (ja) 1993-12-20 1995-08-18 Xerox Corp 加速フォーマットでの再生方法及び再生装置
DE69410489T2 (de) 1994-03-16 1999-02-04 Ibm Verfahren und gerät für die synchronisation und den ablauf von mehreren datenströmen und echtzeitaufgaben
JP3378345B2 (ja) * 1994-03-28 2003-02-17 株式会社東芝 再生装置、記録方法および再生方法
JP2937009B2 (ja) 1994-03-30 1999-08-23 ヤマハ株式会社 音像定位制御装置
US5579183A (en) 1994-04-08 1996-11-26 U.S. Philips Corporation Recording and reproducing an MPEG information signal on/from a record carrier
JP2945842B2 (ja) 1994-04-13 1999-09-06 株式会社東芝 データ記録方法、データ再生装置及びデータ再生方法
US5802394A (en) 1994-06-06 1998-09-01 Starlight Networks, Inc. Method for accessing one or more streams in a video storage system using multiple queues and maintaining continuity thereof
US5754773A (en) 1994-06-16 1998-05-19 Lucent Technologies, Inc. Multimedia on-demand server having different transfer rates
JP3500724B2 (ja) 1994-09-05 2004-02-23 ソニー株式会社 データ再生方法およびデータ再生装置
CA2153445C (en) 1994-09-08 2002-05-21 Ashok Raj Saxena Video optimized media streamer user interface
US5761417A (en) 1994-09-08 1998-06-02 International Business Machines Corporation Video data streamer having scheduler for scheduling read request for individual data buffers associated with output ports of communication node to one storage node
US5664226A (en) 1994-09-08 1997-09-02 International Business Machines Corporation System for merging plurality of atomic data elements into single synchronized file by assigning ouput rate to each channel in response to presentation time duration
US5835667A (en) 1994-10-14 1998-11-10 Carnegie Mellon University Method and apparatus for creating a searchable digital video library and a system and method of using such a library
US5754241A (en) 1994-11-18 1998-05-19 Sanyo Electric Co., Ltd Video decoder capable of controlling encoded video data
EP0716370A3 (de) 1994-12-06 2005-02-16 International Business Machines Corporation Ein Plattenzugangsverfahren, um Multimedia- und Videoinformation auf Wunsch über Grossraumnetze zu liefern
JP3319209B2 (ja) 1995-02-17 2002-08-26 ソニー株式会社 データ復号化装置
US5729471A (en) 1995-03-31 1998-03-17 The Regents Of The University Of California Machine dynamic selection of one video camera/image of a scene from multiple video cameras/images of the scene in accordance with a particular perspective on the scene, an object in the scene, or an event in the scene
US5930493A (en) 1995-06-07 1999-07-27 International Business Machines Corporation Multimedia server system and method for communicating multimedia information
JP3484834B2 (ja) 1995-07-28 2004-01-06 ソニー株式会社 データ符号化/復号化方法および装置
US5864864A (en) * 1995-09-27 1999-01-26 Sun Microsystems, Inc. Method and apparatus for providing transparent persistent data support to foreign data types
US5774643A (en) 1995-10-13 1998-06-30 Digital Equipment Corporation Enhanced raid write hole protection and recovery
US6138203A (en) * 1995-11-10 2000-10-24 Sony Corporation Information processing apparatus and method enabling a write-once recording medium to be utilized as a rewriteable recording medium
JPH09162873A (ja) * 1995-12-05 1997-06-20 Nippon Telegr & Teleph Corp <Ntt> 誤り検出方法および装置
CN1144455C (zh) 1996-02-08 2004-03-31 松下电器产业株式会社 电视接收机
US5850572A (en) 1996-03-08 1998-12-15 Lsi Logic Corporation Error-tolerant video display subsystem
US5784527A (en) 1996-03-22 1998-07-21 Cirrus Logic, Inc. System and method for error handling during playback of an audio/video data stream
JP4012585B2 (ja) * 1996-03-22 2007-11-21 パイオニア株式会社 記録装置及び記録方法並びに再生装置及び再生方法
US5995091A (en) 1996-05-10 1999-11-30 Learn2.Com, Inc. System and method for streaming multimedia data
FI107106B (fi) 1996-06-13 2001-05-31 Ville Juhana Ollikainen Hajautettuun tietoa välittävään rakenteeseen perustuva tiedostopalvelin
US6097380A (en) 1996-06-24 2000-08-01 Microsoft Corporation Continuous media stream control
US5838876A (en) 1996-09-24 1998-11-17 Sony Corporation Frame-accurate edit and playback in digital stream recording
US6078989A (en) * 1996-10-04 2000-06-20 Sony Corporation Disc array control method and disc array control apparatus
JPH1175157A (ja) * 1997-08-29 1999-03-16 Sony Corp 映像信号及び音声信号の記録装置
US6134596A (en) 1997-09-18 2000-10-17 Microsoft Corporation Continuous media file server system and method for scheduling network resources to play multiple files having different data transmission rates
US6430183B1 (en) * 1997-09-18 2002-08-06 International Business Machines Corporation Data transmission system based upon orthogonal data stream mapping
US6324235B1 (en) 1997-11-13 2001-11-27 Creative Technology, Ltd. Asynchronous sample rate tracker
US6249319B1 (en) 1998-03-30 2001-06-19 International Business Machines Corporation Method and apparatus for finding a correct synchronization point within a data stream
US6038636A (en) * 1998-04-27 2000-03-14 Lexmark International, Inc. Method and apparatus for reclaiming and defragmenting a flash memory device
US6195680B1 (en) 1998-07-23 2001-02-27 International Business Machines Corporation Client-based dynamic switching of streaming servers for fault-tolerance and load balancing
US6233389B1 (en) 1998-07-30 2001-05-15 Tivo, Inc. Multimedia time warping system
US6314466B1 (en) 1998-10-06 2001-11-06 Realnetworks, Inc. System and method for providing random access to a multimedia object over a network
US6275899B1 (en) 1998-11-13 2001-08-14 Creative Technology, Ltd. Method and circuit for implementing digital delay lines using delay caches
US6260156B1 (en) * 1998-12-04 2001-07-10 Datalight, Inc. Method and system for managing bad areas in flash memory
US6247069B1 (en) 1999-05-12 2001-06-12 Sony Corporation Automatically configuring storage array including a plurality of media storage devices for storing and providing data within a network of devices
US6239793B1 (en) 1999-05-20 2001-05-29 Rotor Communications Corporation Method and apparatus for synchronizing the broadcast content of interactive internet-based programs

Also Published As

Publication number Publication date
EP1478191A2 (de) 2004-11-17
US6704813B2 (en) 2004-03-09
EP1169862B1 (de) 2004-08-18
EP1478191A3 (de) 2005-05-11
JP4491151B2 (ja) 2010-06-30
JP2002541744A (ja) 2002-12-03
EP1169862A1 (de) 2002-01-09
DE60013110T2 (de) 2005-01-05
DE60036036D1 (de) 2007-09-27
HK1072858A1 (en) 2005-09-09
DE60013110D1 (de) 2004-09-23
US20020158878A1 (en) 2002-10-31
ATE370613T1 (de) 2007-09-15
US20030177292A1 (en) 2003-09-18
HK1043274B (zh) 2005-01-07
HK1043274A1 (en) 2002-09-06
AU4179700A (en) 2000-10-23
ATE274275T1 (de) 2004-09-15
US6820144B2 (en) 2004-11-16
WO2000060873A1 (en) 2000-10-12
EP1478191B1 (de) 2007-08-15

Similar Documents

Publication Publication Date Title
DE60036036T2 (de) Datenformat für einen Informationenstromempfänger
DE60008513T2 (de) Datenstromvorrichtung mit speicher lese-und-schreibzugriffs-synchronisation
DE69408237T3 (de) Vorrichtung zur Komprimierung/Dekomprimierung von Videosignalen in einer Videoplattenaufzeichnungs-/wiedergabegerät
US6748481B1 (en) Streaming information appliance with circular buffer for receiving and selectively reading blocks of streaming information
DE60006845T2 (de) Verfahren und vorrichtung zur zusammenarbeit bei multimediaerzeugung über einem netzwerk
DE69727639T2 (de) Verfahren zur Ortsanzeige aktiver Videoverbindungen
US6535920B1 (en) Analyzing, indexing and seeking of streaming information
Miller et al. News on-demand for multimedia networks
DE60006708T2 (de) System und verfahren zur aufnahme von push daten
DE60021443T2 (de) Verwaltungssystem und -verfahren für audiovisuelle Information
US20100138736A1 (en) Delivering multimedia descriptions
CA2378281A1 (en) System and method for interactively producing a web-based multimedia presentation
EP0902431A2 (de) System zum Schneiden digitaler Video- und Audioinformationen
DE19714265A1 (de) System zum Editieren von auf Text bezogenen Videos
DE19753296B4 (de) Verfahren und System zum Verarbeiten von Textdaten in einem Videosignal
DE69731995T2 (de) Informationsübertragungsverfahren und -vorrichtung
WO2002035388A1 (fr) Appareil de transmission d&#39;informations de recherche
EP1398967A2 (de) Computer und Netzwerk zur Bereitstellung eines Streamingportals
EP0913974B1 (de) Verfahren zur Erstellung von Sendeplänen für Multi Media Daten
DE10323186B4 (de) Einrichtungen zur Verarbeitung eines MPEG-2-Datenstroms und Verfahren zur Verarbeitung eines MPEG-2 Datenstroms
DE10064543B4 (de) Verfahren zur Steuerung eines Multimedia-Systems
AU2001268839B2 (en) Delivering multimedia descriptions
DE102005056045B4 (de) Digitaler Videorekorder
DE10006488A1 (de) Verfahren zur Kennzeichnung von Daten und Verfahren zur Selektion von Daten

Legal Events

Date Code Title Description
8364 No opposition during term of opposition