require 'opentok/client' require 'opentok/stream' require 'opentok/stream_list' module OpenTok # A class for working with OpenTok streams. It includes methods for getting info # about OpenTok streams and for setting layout classes for streams. class Streams # @private def initialize(client) @client = client end # Use this method to get information on an OpenTok stream. # # For example, you can call this method to get information about layout classes used by an OpenTok stream. # The layout classes define how the stream is displayed in the layout of a broadcast stream. # For more information, see {https://tokbox.com/developer/guides/broadcast/live-streaming/#assign-layout-classes-to-streams Assigning layout classes to streams in live streaming broadcasts} # and {https://tokbox.com/developer/guides/archiving/layout-control.html Customizing the video layout for composed archives}. # # @param [String] session_id The session ID of the OpenTok session. # @param [String] stream_id The stream ID within the session. # @return [Stream] The Stream object. # @raise [ArgumentError] stream_id or session_id is invalid. # @raise [OpenTokAuthenticationError] You are not authorized to fetch the stream information. Check your authentication credentials. # @raise [OpenTokError] An OpenTok server error. # def find(session_id, stream_id) raise ArgumentError, 'session_id not provided' if session_id.to_s.empty? raise ArgumentError, 'stream_id not provided' if session_id.to_s.empty? stream_json = @client.info_stream(session_id, stream_id) Stream.new stream_json end # Use this method to get information on all OpenTok streams in a session. # # For example, you can call this method to get information about layout classes used by OpenTok streams. # The layout classes define how the stream is displayed in the layout of a live streaming # broadcast or a composed archive. For more information, see # {https://tokbox.com/developer/guides/broadcast/live-streaming/#assign-layout-classes-to-streams Assigning layout classes to streams in live streaming broadcasts} # and {https://tokbox.com/developer/guides/archiving/layout-control.html Customizing the video layout for composed archives}. # # @param [String] session_id The session ID of the OpenTok session. # @return [StreamList] The StreamList of Stream objects. # @raise [ArgumentError] The stream_id or session_id is invalid. # @raise [OpenTokAuthenticationError] You are not authorized to fetch the stream information. Check your authentication credentials. # @raise [OpenTokError] An OpenTok server error. # def all(session_id) raise ArgumentError, 'session_id not provided' if session_id.to_s.empty? response_json = @client.info_stream(session_id, '') StreamList.new response_json end # Use this method to set the layout of a composed (archive or broadcast) OpenTok stream. # # For example, you can call this method to set the layout classes of an OpenTok stream. # The layout classes define how the stream is displayed in the layout of a live streaming # broadcast or a composed archive. For more information, see # {https://tokbox.com/developer/guides/broadcast/live-streaming/#assign-layout-classes-to-streams Assigning layout classes to streams in live streaming broadcasts} # and {https://tokbox.com/developer/guides/archiving/layout-control.html Customizing the video layout for composed archives}. # # @param [String] session_id The session ID of the OpenTok session. # @param [Hash] opts A hash with one key items and value as array of objects having stream_id and layoutClassList properties. # For more information, see Layout{https://tokbox.com/developer/rest/#change-stream-layout-classes-composed} # @raise [ArgumentError] The session_id is invalid. # @raise [OpenTokAuthenticationError] You are not authorized to fetch the stream information. Check your authentication credentials. # @raise [OpenTokStreamLayoutError] The layout operation could not be performed due to incorrect layout values. # @raise [OpenTokError] An OpenTok server error. # def layout(session_id, opts) raise ArgumentError, 'session_id not provided' if session_id.to_s.empty? raise ArgumentError, 'opts is empty' if opts.empty? response = @client.layout_streams(session_id, opts) (200..300).include? response.code end end end