Misplaced Pages

Advanced Systems Format

Article snapshot taken from Wikipedia with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.

Advanced Systems Format (formerly Advanced Streaming Format , Active Streaming Format ) is Microsoft 's proprietary digital audio / digital video container format , especially meant for streaming media . ASF is part of the Media Foundation framework.

#455544

61-893: ASF is based on serialized objects which are essentially byte sequences identified by a GUID marker. The format does not specify how (i.e. with which codec ) the video or audio should be encoded; it just specifies the structure of the video/audio stream. This is similar to the function performed by the QuickTime File Format , AVI , or Ogg formats. One of the objectives of ASF was to support playback from digital media servers , HTTP servers , and local storage devices such as hard disk drives . The most common media contained within an ASF file are Windows Media Audio (WMA) and Windows Media Video (WMV). The most common file extensions for ASF files are extension .WMA (audio-only files using Windows Media Audio, with MIME-type audio/x-ms-wma ) and .WMV (files containing video, using

122-546: A String object containing all the information necessary to reconstitute objects of this class and all referenced objects up to a maximum depth given as an integer parameter (a value of -1 implies that depth checking should be disabled). The class method _load should take a String and return an object of this class. Serde is the most widely used library, or crate, for serialization in Rust . In general, non-recursive and non-sharing objects can be stored and retrieved in

183-716: A license from Microsoft that however does not allow distribution of sources and is not compatible with open source licenses. The author of the free software project VirtualDub reported that a Microsoft employee informed him that his software violated a Microsoft patent regarding ASF playback. Certain error-correcting techniques related to ASF were patented in the United States ( United States Patent 6,041,345 Levi, et al. March 21, 2000) by Microsoft until August 10, 2019. Serialization In computing, serialization (or serialisation , also referred to as pickling in Python )

244-451: A Swing component, or any component which inherits it, may be serialized to a byte stream, but it is not guaranteed that this will be re-constitutable on another machine. Since ECMAScript 5.1, JavaScript has included the built-in JSON object and its methods JSON.parse() and JSON.stringify() . Although JSON is originally based on a subset of JavaScript, there are boundary cases where JSON

305-459: A byte stream. Primitives as well as non-transient, non-static referenced objects are encoded into the stream. Each object that is referenced by the serialized object via a field that is not marked as transient must also be serialized; and if any object in the complete graph of non-transient object references is not serializable, then serialization will fail. The developer can influence this behavior by marking objects as transient, or by redefining

366-457: A class serializable needs to be a deliberate design decision and not a default condition. Lastly, serialization allows access to non- transient private members of a class that are not otherwise accessible. Classes containing sensitive information (for example, a password) should not be serializable nor externalizable. The standard encoding method uses a recursive graph-based translation of the object's class descriptor and serializable fields into

427-458: A class — __sleep() and __wakeup()  — that are called from within serialize() and unserialize() , respectively, that can clean up and restore an object. For example, it may be desirable to close a database connection on serialization and restore the connection on deserialization; this functionality would be handled in these two magic methods. They also permit the object to pick which properties are serialized. Since PHP 5.1, there

488-571: A computer running on a different hardware architecture should be able to reliably reconstruct a serialized data stream, regardless of endianness . This means that the simpler and faster procedure of directly copying the memory layout of the data structure cannot work reliably for all architectures. Serializing the data structure in an architecture-independent format means preventing the problems of byte ordering , memory layout, or simply different ways of representing data structures in different programming languages . Inherent to any serialization scheme

549-468: A connection or a raw vector. REBOL will serialize to file ( save/all ) or to a string! ( mold/all ). Strings and files can be deserialized using the polymorphic load function. RProtoBuf provides cross-language data serialization in R, using Protocol Buffers . Ruby includes the standard module Marshal with 2 methods dump and load , akin to the standard Unix utilities dump and restore . These methods serialize to

610-547: A custom block cipher, RC4 stream cipher and the SHA-1 hashing function. ASF container-based media are sometimes still streamed on the internet either through the MMS protocol or the RTSP protocol. Mostly, however, they contain material encoded for 'progressive download', which can be distributed by any webserver and then offers the same advantages as streaming: the file starts playing as soon as

671-566: A data stream it is visible what device has been used by the user side – it is visible on user agent : The following information is shared out of used device: A data point is a tag that collects information about a certain action, performed by a user on a website. Data points exists in two types, the values of which are used to create appropriate audiences. Those are: Segment is a logical statement, built on specific Data Points using AND, OR or NOT operators. Hybrid data – raw data out of both Data Point and Segment data formats. URLs –

SECTION 10

#1732852439456

732-434: A data stream. Using a mobile phone to have a conversation transmits the sound as a data stream. In a formal way, a data stream is any ordered pair ( s , Δ ) {\displaystyle (s,\Delta )} where: Data Stream contains different sets of data, that depend on the chosen data format. There are various areas where data streams are used: Core integrations with data streams are: In

793-416: A data structure from a series of bytes, is deserialization , (also called unserialization or unmarshalling ). In networking equipment hardware, the part that is responsible for serialization and deserialization is commonly called SerDes . Uses of serialization include: For some of these features to be useful, architecture independence must be maintained. For example, for maximal use of distribution,

854-439: A data structure, transformed by another program, then possibly executed or written out, such as in a read–eval–print loop . Not all readers/writers support cyclic, recursive or shared structures. .NET has several serializers designed by Microsoft . There are also many serializers by third parties. More than a dozen serializers are discussed and tested here . and here OCaml 's standard library provides marshalling through

915-626: A data type tags, support for cyclic data structures, indentation-sensitive syntax, and multiple forms of scalar data quoting. YAML is an open format. Property lists are used for serialization by NeXTSTEP , GNUstep , macOS , and iOS frameworks . Property list , or p-list for short, doesn't refer to a single serialization format but instead several different variants, some human-readable and one binary. For large volume scientific datasets, such as satellite data and output of numerical climate, weather, or ocean models, specific binary serialization standards have been developed, e.g. HDF , netCDF and

976-491: A human readable form using the storeOn: / readFrom: protocol. The storeOn: method generates the text of a Smalltalk expression which – when evaluated using readFrom: – recreates the original object. This scheme is special, in that it uses a procedural description of the object, not the data itself. It is therefore very flexible, allowing for classes to define more compact representations. However, in its original form, it does not handle cyclic data structures or preserve

1037-593: A list of arrays would be printed by (print foo) . Similarly an object can be read from a stream named s by (read s) . These two parts of the Lisp implementation are called the Printer and the Reader. The output of " print " is human readable; it uses lists demarked by parentheses, for example: ( 4 2.9 "x" y ) . In many types of Lisp, including Common Lisp , the printer cannot represent every type of data because it

1098-653: A method), because executable code in functions cannot be transmitted across different programs. (There is a flag to marshal the code position of a function but it can only be unmarshalled in exactly the same program). The standard marshalling functions can preserve sharing and handle cyclic data, which can be configured by a flag. Several Perl modules available from CPAN provide serialization mechanisms, including Storable , JSON::XS and FreezeThaw . Storable includes functions to serialize and deserialize Perl data structures to and from files or Perl scalars. In addition to serializing directly to files, Storable includes

1159-464: A minimum number of bytes is received and the rest of the download continues in the background while one is watching or listening. The Library of Congress Digital Preservation project considers ASF to be the de facto successor of RIFF . In 2010 Google picked RIFF as the container format for WebP . The specification is downloadable from the Microsoft website, and the format can be implemented under

1220-587: A more complex, non-linear storage organization. Even on a single machine, primitive pointer objects are too fragile to save because the objects to which they point may be reloaded to a different location in memory. To deal with this, the serialization process includes a step called unswizzling or pointer unswizzling , where direct pointer references are converted to references based on name or position. The deserialization process includes an inverse step called pointer swizzling . Since both serializing and deserializing can be driven from common code (for example,

1281-427: A semantically identical clone of the original object. For many complex objects, such as those that make extensive use of references , this process is not straightforward. Serialization of objects does not include any of their associated methods with which they were previously linked. This process of serializing an object is also called marshalling an object in some situations. The opposite operation, extracting

SECTION 20

#1732852439456

1342-967: A serialized object created in Squeak Smalltalk cannot be restored in Ambrai Smalltalk . Consequently, various applications that do work on multiple Smalltalk implementations that rely on object serialization cannot share data between these different implementations. These applications include the MinneStore object database and some RPC packages. A solution to this problem is SIXX, which is a package for multiple Smalltalks that uses an XML -based format for serialization. The Swift standard library provides two protocols, Encodable and Decodable (composed together as Codable ), which allow instances of conforming types to be serialized to or deserialized from JSON , property lists , or other formats. Default implementations of these protocols can be generated by

1403-418: A serialized state. For example, a Thread object is tied to the state of the current JVM . There is no context in which a deserialized Thread object would maintain useful semantics. Secondly, the serialized state of an object forms part of its class' compatibility contract. Maintaining compatibility between versions of serializable classes requires additional effort and consideration. Therefore, making

1464-440: A so-called "binary-object storage framework", which support serialization into and retrieval from a compact binary form. Both handle cyclic, recursive and shared structures, storage/retrieval of class and metaclass info and include mechanisms for "on the fly" object migration (i.e. to convert instances which were written by an older version of a class with a different object layout). The APIs are similar (storeBinary/readBinary), but

1525-589: A video track, much like the ID3 tags of MP3 files. It supports scalable media types and stream prioritization; as such, it is a format optimized for streaming. The ASF container provides the framework for digital rights management in Windows Media Audio and Windows Media Video. An analysis of an older scheme used in WMA reveals that it is using a combination of elliptic curve cryptography key exchange, DES block cipher,

1586-436: Is a lightweight plain-text alternative to XML, and is also commonly used for client-server communication in web applications. JSON is based on JavaScript syntax , but is independent of JavaScript and supported in many other programming languages. JSON is an open format, standardized as STD 90 ( RFC   8259 ), ECMA-404 , and ISO/IEC 21778:2017 . YAML is a strict superset of JSON and includes additional features such as

1647-447: Is a member of the Read type class defines a function that will extract the data from the string representation of the dumped data. The Show type class, in turn, contains the show function from which a string representation of the object can be generated. The programmer need not define the functions explicitly—merely declaring a type to be deriving Read or deriving Show, or both, can make

1708-467: Is an object-oriented serialization mechanism for objects, the Serializable interface. Prolog 's term structure, which is the only data structure of the language, can be serialized out through the built-in predicate write_term/3 and serialized-in through the built-in predicates read/1 and read_term/2 . The resulting stream is uncompressed text (in some encoding determined by configuration of

1769-462: Is fully integrated with its IDE . The component's contents are saved to a DFM file and reloaded on-the-fly. Go natively supports unmarshalling/marshalling of JSON and XML data. There are also third-party modules that support YAML and Protocol Buffers . Go also supports Gobs . In Haskell, serialization is supported for types that are members of the Read and Show type classes . Every type that

1830-555: Is not clear how to do so. In Common Lisp for example the printer cannot print CLOS objects. Instead the programmer may write a method on the generic function print-object , this will be invoked when the object is printed. This is somewhat similar to the method used in Ruby. Lisp code itself is written in the syntax of the reader, called read syntax. Most languages use separate and different parsers to deal with code and data, Lisp only uses one. A file containing lisp code may be read into memory as

1891-485: Is not valid JavaScript. Specifically, JSON allows the Unicode line terminators U+2028 LINE SEPARATOR and U+2029 PARAGRAPH SEPARATOR to appear unescaped in quoted strings, while ECMAScript 2018 and older does not. See the main article on JSON . Julia implements serialization through the serialize() / deserialize() modules, intended to work within the same version of Julia, and/or instance of

Advanced Systems Format - Misplaced Pages Continue

1952-462: Is that, because the encoding of the data is by definition serial, extracting one part of the serialized data structure requires that the entire object be read from start to end, and reconstructed. In many applications, this linearity is an asset, because it enables simple, common I/O interfaces to be utilized to hold and pass on the state of an object. In applications where higher performance is an issue, it can make sense to expend more effort to deal with

2013-431: Is the process of translating a data structure or object state into a format that can be stored (e.g. files in secondary storage devices , data buffers in primary storage devices) or transmitted (e.g. data streams over computer networks ) and reconstructed later (possibly in a different computer environment). When the resulting series of bits is reread according to the serialization format, it can be used to create

2074-553: Is useful in the programming of user interfaces whose contents are time-varying — graphical objects can be created, removed, altered, or made to handle input events without necessarily having to write separate code to do those things. Serialization breaks the opacity of an abstract data type by potentially exposing private implementation details. Trivial implementations which serialize all data members may violate encapsulation . To discourage competitors from making compatible products, publishers of proprietary software often keep

2135-524: The Marshal module and the Pervasives functions output_value and input_value . While OCaml programming is statically type-checked, uses of the Marshal module may break type guarantees, as there is no way to check whether an unmarshalled stream represents objects of the expected type. In OCaml it is difficult to marshal a function or a data structure which contains a function (e.g. an object which contains

2196-538: The freeze function to return a serialized copy of the data packed into a scalar, and thaw to deserialize such a scalar. This is useful for sending a complex data structure over a network socket or storing it in a database. When serializing structures with Storable , there are network safe functions that always store their data in a format that is readable on any computer at a small cost of speed. These functions are named nstore , nfreeze , etc. There are no "n" functions for deserializing these structures —

2257-583: The Boost Framework , the S11n framework, and Cereal. MFC framework (Microsoft) also provides serialization methodology as part of its Document-View architecture. CFML allows data structures to be serialized to WDDX with the <cfwddx> tag and to JSON with the SerializeJSON() function. Delphi provides a built-in mechanism for serialization of components (also called persistent objects), which

2318-542: The Serialize function in Microsoft Foundation Classes ), it is possible for the common code to do both at the same time, and thus, 1) detect differences between the objects being serialized and their prior copies, and 2) provide the input for the next such detection. It is not necessary to actually build the prior copy because differences can be detected on the fly, a technique called differential execution. This

2379-558: The External Data Representation (XDR) standard as described in RFC 1014). Finally, it is recommended that an object's __repr__ be evaluable in the right environment, making it a rough match for Common Lisp's print-object . Not all object types can be pickled automatically, especially ones that hold operating system resources like file handles , but users can register custom "reduction" and construction functions to support

2440-405: The Windows Media Audio and Video codecs, with MIME-type video/x-ms-asf ). These files are identical to the old .ASF files but for their extension and MIME-type. The different extensions are used to make it easier to identify the content of a media file. ASF files can also contain objects representing metadata , such as the artist, title, album and genre for an audio track, or the director of

2501-439: The accelerated version and falls back to the pure Python version. R has the function dput which writes an ASCII text representation of an R object to a file or connection. A representation can be read from a file using dget . More specific, the function serialize serializes an R object to a connection, the output being a raw vector coded in hexadecimal format. The unserialize function allows to read an object from

Advanced Systems Format - Misplaced Pages Continue

2562-494: The built-in data types , as well as plain old data structs , as binary data. As such, it is usually trivial to write custom serialization functions. Moreover, compiler-based solutions, such as the ODB ORM system for C++ and the gSOAP toolkit for C and C++, are capable of automatically producing serialization code with few or no modifications to class declarations. Other popular serialization frameworks are Boost.Serialization from

2623-455: The built-in cmdlets Import-CSV and Export-CSV . Data stream In connection-oriented communication , a data stream is the transmission of a sequence of digitally encoded signals to convey information . Typically, the transmitted symbols are grouped into a series of packets . Data streaming has become ubiquitous. Anything transmitted over the Internet is transmitted as

2684-751: The compiler for types whose stored properties are also Decodable or Encodable . PowerShell implements serialization through the built-in cmdlet Export-CliXML . Export-CliXML serializes .NET objects and stores the resulting XML in a file. To reconstitute the objects, use the Import-CliXML cmdlet, which generates a deserialized object from the XML in the exported file. Deserialized objects, often known as "property bags" are not live objects; they are snapshots that have properties, but no methods. Two dimensional data structures can also be (de)serialized in CSV format using

2745-530: The compiler generate the appropriate functions for many cases (but not all: function types, for example, cannot automatically derive Show or Read). The auto-generated instance for Show also produces valid source code, so the same Haskell value can be generated by running the code produced by show in, for example, a Haskell interpreter. For more efficient serialization, there are haskell libraries that allow high-speed serialization in binary format, e.g. binary . Java provides automatic serialization which requires that

2806-504: The corresponding manual pages for SWI-Prolog, SICStus Prolog, GNU Prolog. Whether and how serialized terms received over the network are checked against a specification (after deserialization from the character stream has happened) is left to the implementer. Prolog's built-in Definite Clause Grammars can be applied at that stage. The core general serialization mechanism is the pickle standard library module, alluding to

2867-803: The database systems term pickling to describe data serialization ( unpickling for deserializing ). Pickle uses a simple stack -based virtual machine that records the instructions used to reconstruct the object. It is a cross-version customisable but unsafe (not secure against erroneous or malicious data) serialization format. Malformed or maliciously constructed data, may cause the deserializer to import arbitrary modules and instantiate any object. The standard library also includes modules serializing to standard data formats: json (with built-in support for basic scalar and collection types and able to support arbitrary types via encoding and decoding hooks ). plistlib (with support for both binary and XML property list formats). xdrlib (with support for

2928-612: The details of their programs' serialization formats a trade secret . Some deliberately obfuscate or even encrypt the serialized data. Yet, interoperability requires that applications be able to understand each other's serialization formats. Therefore, remote method call architectures such as CORBA define their serialization formats in detail. Many institutions, such as archives and libraries, attempt to future proof their backup archives—in particular, database dumps —by storing them in some relatively human-readable serialized format. The Xerox Network Systems Courier technology in

2989-456: The disadvantage of losing the more compact, byte-stream-based encoding, but by this point larger storage and transmission capacities made file size less of a concern than in the early days of computing. In the 2000s, XML was often used for asynchronous transfer of structured data between client and server in Ajax web applications. XML is an open format, and standardized as a W3C recommendation . JSON

3050-638: The early 1980s influenced the first widely adopted standard. Sun Microsystems published the External Data Representation (XDR) in 1987. XDR is an open format , and standardized as STD 67 (RFC 4506). In the late 1990s, a push to provide an alternative to the standard serialization protocols started: XML , an SGML subset, was used to produce a human-readable text-based encoding . Such an encoding can be useful for persistent objects that may be read and understood by humans, or communicated to other systems regardless of programming language. It has

3111-530: The encoding details are different, making these two formats incompatible. However, the Smalltalk/X code is open source and free and can be loaded into other Smalltalks to allow for cross-dialect object interchange. Object serialization is not part of the ANSI Smalltalk specification. As a result, the code to serialize an object varies by Smalltalk implementation. The resulting binary data also varies. For instance,

SECTION 50

#1732852439456

3172-642: The identity of shared references (i.e. two references a single object will be restored as references to two equal, but not identical copies). For this, various portable and non-portable alternatives exist. Some of them are specific to a particular Smalltalk implementation or class library. There are several ways in Squeak Smalltalk to serialize and store objects. The easiest and most used are storeOn:/readFrom: and binary storage formats based on SmartRefStream serializers. In addition, bundled objects can be stored and retrieved using ImageSegments . Both provide

3233-415: The object be marked by implementing the java.io.Serializable interface . Implementing the interface marks the class as "okay to serialize", and Java then handles serialization internally. There are no serialization methods defined on the Serializable interface, but a serializable class can optionally define methods with certain special names and signatures that if defined, will be called as part of

3294-595: The older GRIB . Several object-oriented programming languages directly support object serialization (or object archival ), either by syntactic sugar elements or providing a standard interface for doing so. The languages which do so include Ruby , Smalltalk , Python , PHP , Objective-C , Delphi , Java , and the .NET family of languages. There are also libraries available that add serialization support to languages that lack native support for it. C and C++ do not provide serialization as any sort of high-level construct, but both languages support writing any of

3355-465: The pickling and unpickling of arbitrary types. Pickle was originally implemented as the pure Python pickle module, but, in versions of Python prior to 3.0, the cPickle module (also a built-in) offers improved performance (up to 1000 times faster ). The cPickle was adapted from the Unladen Swallow project. In Python 3, users should always import the standard version, which attempts to import

3416-519: The regular thaw and retrieve deserialize structures serialized with the " n " functions and their machine-specific equivalents. PHP originally implemented serialization through the built-in serialize() and unserialize() functions. PHP can serialize any of its data types except resources (file pointers, sockets, etc.). The built-in unserialize() function is often dangerous when used on completely untrusted data. For objects, there are two " magic methods" that can be implemented within

3477-449: The same system image. The HDF5.jl package offers a more stable alternative, using a documented format and common library with wrappers for different languages, while the default serialization format is suggested to have been designed rather with maximal performance for network communication in mind. Generally a Lisp data structure can be serialized with the functions " read " and " print ". A variable foo containing, for example,

3538-539: The serialization for an object so that some portion of the reference graph is truncated and not serialized. Java does not use constructor to serialize objects. It is possible to serialize Java objects through JDBC and store them into a database. While Swing components do implement the Serializable interface, they are not guaranteed to be portable between different versions of the Java Virtual Machine. As such,

3599-573: The serialization/deserialization process. The language also allows the developer to override the serialization process more thoroughly by implementing another interface, the Externalizable interface, which includes two special methods that are used to save and restore the object's state. There are three primary reasons why objects are not serializable by default and must implement the Serializable interface to access Java's serialization mechanism. Firstly, not all objects capture useful semantics in

3660-488: The standard class String , that is, they effectively become a sequence of bytes. Some objects cannot be serialized (doing so would raise a TypeError exception): bindings, procedure objects, instances of class IO, singleton objects and interfaces. If a class requires custom serialization (for example, it requires certain cleanup actions done on dumping / restoring), it can be done by implementing 2 methods: _dump and _load . The instance method _dump should return

3721-624: The target stream), with any free variables in the term represented by placeholder variable names. The predicate write_term/3 is standardized in the ISO Specification for Prolog (ISO/IEC 13211-1) on pages 59 ff. ("Writing a term, § 7.10.5"). Therefore it is expected that terms serialized-out by one implementation can be serialized-in by another without ambiguity or surprises. In practice, implementation-specific extensions (e.g. SWI-Prolog's dictionaries) may use non-standard term structures, so interoperability may break in edge cases. As examples, see

SECTION 60

#1732852439456
#455544