It is now recognized that object-oriented techniques are well suited to the design and implementation of multimedia applications. Objects may be used to encapsulate the great variety of hardware devices used in such applications and to abstract over the details of low level interfaces. Furthermore, complex media processing algorithms, such as compression/decompression, may be encapsulated within objects making them easier to reuse across applications. Real-time synchronization is also an essential aspect of multimedia which arises from the inherently temporal properties of media such as audio and video. In this paper, we propose a set of programming abstractions and an approach to address real-time synchronization requirements in an object-oriented framework. In our approach, active objects encapsulate media processing activities. Real-time synchronization is maintained by reactive objects that control the execution of media processing objects. A key advantage of our approach is that it allows the separation of synchronization from the behavior of objects. Both objects and synchronization specifications may be reused in different contexts. In addition, the approach enables the specification of real-time synchronization in a high-level notation that has proven well suited to this task.