162 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			162 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | == Opus audio codec == | ||
|  | 
 | ||
|  | Opus is a codec for interactive speech and audio transmission over the Internet. | ||
|  | 
 | ||
|  |   Opus can handle a wide range of interactive audio applications, including | ||
|  | Voice over IP, videoconferencing, in-game  chat, and even remote live music | ||
|  | performances. It can scale from low bit-rate narrowband speech to very high | ||
|  | quality stereo music. | ||
|  | 
 | ||
|  |   Opus, when coupled with an appropriate container format, is also suitable | ||
|  | for non-realtime  stored-file applications such as music distribution, game | ||
|  | soundtracks, portable music players, jukeboxes, and other applications that | ||
|  | have historically used high latency formats such as MP3, AAC, or Vorbis. | ||
|  | 
 | ||
|  |                     Opus is specified by IETF RFC 6716: | ||
|  |                     https://tools.ietf.org/html/rfc6716 | ||
|  | 
 | ||
|  |   The Opus format and this implementation of it are subject to the royalty- | ||
|  | free patent and copyright licenses specified in the file COPYING. | ||
|  | 
 | ||
|  | This package implements a shared library for encoding and decoding raw Opus | ||
|  | bitstreams. Raw Opus bitstreams should be used over RTP according to | ||
|  |  https://tools.ietf.org/html/rfc7587 | ||
|  | 
 | ||
|  | The package also includes a number of test  tools used for testing the | ||
|  | correct operation of the library. The bitstreams read/written by these | ||
|  | tools should not be used for Opus file distribution: They include | ||
|  | additional debugging data and cannot support seeking. | ||
|  | 
 | ||
|  | Opus stored in files should use the Ogg encapsulation for Opus which is | ||
|  | described at: | ||
|  |  https://tools.ietf.org/html/rfc7845 | ||
|  | 
 | ||
|  | An opus-tools package is available which provides encoding and decoding of | ||
|  | Ogg encapsulated Opus files and includes a number of useful features. | ||
|  | 
 | ||
|  | Opus-tools can be found at: | ||
|  |  https://git.xiph.org/?p=opus-tools.git | ||
|  | or on the main Opus website: | ||
|  |  https://opus-codec.org/ | ||
|  | 
 | ||
|  | == Compiling libopus == | ||
|  | 
 | ||
|  | To build from a distribution tarball, you only need to do the following: | ||
|  | 
 | ||
|  |     % ./configure | ||
|  |     % make | ||
|  | 
 | ||
|  | To build from the git repository, the following steps are necessary: | ||
|  | 
 | ||
|  | 0) Set up a development environment: | ||
|  | 
 | ||
|  | On an Ubuntu or Debian family Linux distribution: | ||
|  | 
 | ||
|  |     % sudo apt-get install git autoconf automake libtool gcc make | ||
|  | 
 | ||
|  | On a Fedora/Redhat based Linux: | ||
|  | 
 | ||
|  |     % sudo dnf install git autoconf automake libtool gcc make | ||
|  | 
 | ||
|  | Or for older Redhat/Centos Linux releases: | ||
|  | 
 | ||
|  |     % sudo yum install git autoconf automake libtool gcc make | ||
|  | 
 | ||
|  | On Apple macOS, install Xcode and brew.sh, then in the Terminal enter: | ||
|  | 
 | ||
|  |     % brew install autoconf automake libtool | ||
|  | 
 | ||
|  | 1) Clone the repository: | ||
|  | 
 | ||
|  |     % git clone https://git.xiph.org/opus.git | ||
|  |     % cd opus | ||
|  | 
 | ||
|  | 2) Compiling the source | ||
|  | 
 | ||
|  |     % ./autogen.sh | ||
|  |     % ./configure | ||
|  |     % make | ||
|  | 
 | ||
|  | 3) Install the codec libraries (optional) | ||
|  | 
 | ||
|  |     % sudo make install | ||
|  | 
 | ||
|  | Once you have compiled the codec, there will be a opus_demo executable | ||
|  | in the top directory. | ||
|  | 
 | ||
|  | Usage: opus_demo [-e] <application> <sampling rate (Hz)> <channels (1/2)> | ||
|  |          <bits per second> [options] <input> <output> | ||
|  |        opus_demo -d <sampling rate (Hz)> <channels (1/2)> [options] | ||
|  |          <input> <output> | ||
|  | 
 | ||
|  | mode: voip | audio | restricted-lowdelay | ||
|  | options: | ||
|  |   -e                : only runs the encoder (output the bit-stream) | ||
|  |   -d                : only runs the decoder (reads the bit-stream as input) | ||
|  |   -cbr              : enable constant bitrate; default: variable bitrate | ||
|  |   -cvbr             : enable constrained variable bitrate; default: | ||
|  |                       unconstrained | ||
|  |   -bandwidth <NB|MB|WB|SWB|FB> | ||
|  |                     : audio bandwidth (from narrowband to fullband); | ||
|  |                       default: sampling rate | ||
|  |   -framesize <2.5|5|10|20|40|60> | ||
|  |                     : frame size in ms; default: 20 | ||
|  |   -max_payload <bytes> | ||
|  |                     : maximum payload size in bytes, default: 1024 | ||
|  |   -complexity <comp> | ||
|  |                     : complexity, 0 (lowest) ... 10 (highest); default: 10 | ||
|  |   -inbandfec        : enable SILK inband FEC | ||
|  |   -forcemono        : force mono encoding, even for stereo input | ||
|  |   -dtx              : enable SILK DTX | ||
|  |   -loss <perc>      : simulate packet loss, in percent (0-100); default: 0 | ||
|  | 
 | ||
|  | input and output are little-endian signed 16-bit PCM files or opus | ||
|  | bitstreams with simple opus_demo proprietary framing. | ||
|  | 
 | ||
|  | == Testing == | ||
|  | 
 | ||
|  | This package includes a collection of automated unit and system tests | ||
|  | which SHOULD be run after compiling the package especially the first | ||
|  | time it is run on a new platform. | ||
|  | 
 | ||
|  | To run the integrated tests: | ||
|  | 
 | ||
|  |     % make check | ||
|  | 
 | ||
|  | There is also collection of standard test vectors which are not | ||
|  | included in this package for size reasons but can be obtained from: | ||
|  | https://opus-codec.org/docs/opus_testvectors-rfc8251.tar.gz | ||
|  | 
 | ||
|  | To run compare the code to these test vectors: | ||
|  | 
 | ||
|  |     % curl -OL https://opus-codec.org/docs/opus_testvectors-rfc8251.tar.gz | ||
|  |     % tar -zxf opus_testvectors-rfc8251.tar.gz | ||
|  |     % ./tests/run_vectors.sh ./ opus_newvectors 48000 | ||
|  | 
 | ||
|  | == Portability notes == | ||
|  | 
 | ||
|  | This implementation uses floating-point by default but can be compiled to | ||
|  | use only fixed-point arithmetic by setting --enable-fixed-point (if using | ||
|  | autoconf) or by defining the FIXED_POINT macro (if building manually). | ||
|  | The fixed point implementation has somewhat lower audio quality and is | ||
|  | slower on platforms with fast FPUs, it is normally only used in embedded | ||
|  | environments. | ||
|  | 
 | ||
|  | The implementation can be compiled with either a C89 or a C99 compiler. | ||
|  | While it does not rely on any _undefined behavior_ as defined by C89 or | ||
|  | C99, it relies on common _implementation-defined behavior_ for two's | ||
|  | complement architectures: | ||
|  | 
 | ||
|  | o Right shifts of negative values are consistent with two's | ||
|  |   complement arithmetic, so that a>>b is equivalent to | ||
|  |   floor(a/(2^b)), | ||
|  | 
 | ||
|  | o For conversion to a signed integer of N bits, the value is reduced | ||
|  |   modulo 2^N to be within range of the type, | ||
|  | 
 | ||
|  | o The result of integer division of a negative value is truncated | ||
|  |   towards zero, and | ||
|  | 
 | ||
|  | o The compiler provides a 64-bit integer type (a C99 requirement | ||
|  |   which is supported by most C89 compilers). |