Tips

Red5 フリーソフトのFlashストリーミングサーバ ~開発クライアントの構築 その4~

(3)「demoservice.py」の編集

「demoservice.py」も「demoservice.js」と同様に、red5アプリケーションの「oflaDemo2」を動作するための
サービス用のクラスファイルとなります。
ファイルはPythonで構成されています。
変更する箇所は、15行目・28行目となります。

  • 変更前
  • """
    demoservice.py - a translation into Python of the ofla demo application, a Red5 example.
    
    @author The Red5 Project (red5@osflash.org)
    @author Joachim Bauch (jojo@struktur.de)
    """
    
    from java.io import File
    from java.lang import System
    from java.text import SimpleDateFormat
    from java.util import Date
    from java.util import HashMap
    
    from org.red5.server.api import Red5
    from org.red5.server.webapp.oflaDemo import IDemoService
    
    class DemoService(IDemoService):
    
        def getListOfAvailableFLVs(self):
            """Return list of .flv files that can be streamed."""
            scope = Red5.getConnectionLocal().getScope()
            serverRoot = System.getProperty('red5.root')
            filesMap = HashMap()
            try:
                print 'Getting the FLV files'
                flvs = scope.getResources("streams/*.flv")
                for file in flvs:
                    fso = File(serverRoot + '/webapps/oflaDemo' + file.path)
                    flvName = fso.getName()
                    flvBytes = 0
                    if hasattr(fso, 'length'):
                        flvBytes = fso.length()
                    else:
                        print 'Length not found'
    
                    lastMod = '0'
                    if hasattr(fso, 'lastModified'):
                        lastMod = self.formatDate(Date(fso.lastModified()))
                    else:
                        log.debug('Last modified not found')
    
                    print 'FLV Name:', flvName
                    print 'Last modified date:', lastMod
                    print 'Size:', flvBytes
                    print '-------'
    
                    fileInfo = HashMap(3);
                    fileInfo["name"] = flvName
                    fileInfo["lastModified"] = lastMod
                    fileInfo["size"] = flvBytes
                    filesMap[flvName] = fileInfo
            except Exception, e:
                print 'Error in getListOfAvailableFLVs:', e
    
            return filesMap;
    
        def formatDate(self, date):
            return SimpleDateFormat("dd/MM/yyyy hh:mm:ss").format(date)
    
    def getInstance(*args):
        print 'Arguments:', args
        return DemoService()
    
  • 変更後
  • from java.util import Date
    from java.util import HashMap
    
    from org.red5.server.api import Red5
    from org.red5.server.webapp.oflaDemo2 import IDemoService
    
    class DemoService(IDemoService):
    
        def getListOfAvailableFLVs(self):
    
            try:
                print 'Getting the FLV files'
                flvs = scope.getResources("streams/*.flv")
                for file in flvs:
                    fso = File(serverRoot + '/webapps/oflaDemo2' + file.path)
                    flvName = fso.getName()
                    flvBytes = 0
                    if hasattr(fso, 'length'):
                        flvBytes = fso.length()
                    else:
                        print 'Length not found'
    

次に「demoservice.rb」について見ていきます。

(4)「demoservice.rb」の編集

「demoservice.rb」も「demoservice.js」と同様に、red5アプリケーションの「oflaDemo2」を動作するための
サービス用のクラスファイルとなります。
ファイルはJRubyで構成されています。
変更する箇所は、5行目・33行目となります。

  • 変更前
  • # JRuby - style
    require 'java'
    module RedFive
        include_package "org.springframework.core.io"
        include_package "org.red5.server.webapp.oflaDemo"
    end
    include_class "org.red5.server.api.Red5"
    include_class "java.util.HashMap"
    
    #
    # demoservice.rb - a translation into Ruby of the ofla demo application, a red5 example.
    #
    # @author Paul Gregoire
    #
    class DemoService < RedFive::DemoServiceImpl
    
        attr_reader :filesMap
        attr_writer :filesMap
    
    	def initialize
    	   puts "Initializing ruby demoservice"
    	   super
    	   @filesMap = HashMap.new
    	end
    
    	def getListOfAvailableFLVs
    		puts "Getting the FLV files"
    		begin
    #		    puts "R5 con local: #{Red5::getConnectionLocal}"
    #		    puts "Scope: #{Red5::getConnectionLocal.getScope}"
    #		    puts "Root path: #{File.expand_path('/')}"
    #		    puts "Current path:  #{File.expand_path('webapps/oflaDemo/')}"
                dirname = File.expand_path('webapps/oflaDemo/streams').to_s
    			Dir.open(dirname).entries.grep(/.flv$/) do |dir|
    			    dir.each do |flvName|
          			    fileInfo = HashMap.new
          			    stats = File.stat(dirname+'/'+flvName)
          			    fileInfo["name"] = flvName
          			    fileInfo["lastModified"] = stats.mtime
          			    fileInfo["size"] = stats.size || 0
                        @filesMap[flvName] = fileInfo
                        print 'FLV Name:', flvName
                        print 'Last modified date:', stats.mtime
                        print 'Size:', stats.size || 0
                        print '-------'
                    end
                end
    		rescue Exception => ex
    			puts "Error in getListOfAvailableFLVs #{errorType} n"
    			puts "Exception: #{ex} n"
    			puts caller.join("n");
    		end
    		return filesMap
    	end
    
    	def formatDate(date)
    		return date.strftime("%d/%m/%Y %I:%M:%S")
    	end
    
        def method_missing(m, *args)
          super unless @value.respond_to?(m)
          return @value.send(m, *args)
        end
    
    end
    
  • 変更後
  • # JRuby - style
    require 'java'
    module RedFive
        include_package "org.springframework.core.io"
        include_package "org.red5.server.webapp.oflaDemo2"
    end
    include_class "org.red5.server.api.Red5"
    include_class "java.util.HashMap"
    
    
    #		    puts "R5 con local: #{Red5::getConnectionLocal}"
    #		    puts "Scope: #{Red5::getConnectionLocal.getScope}"
    #		    puts "Root path: #{File.expand_path('/')}"
    #		    puts "Current path:  #{File.expand_path('webapps/oflaDemo/')}"
                dirname = File.expand_path('webapps/oflaDemo2/streams').to_s
    			Dir.open(dirname).entries.grep(/.flv$/) do |dir|
    			    dir.each do |flvName|
          			    fileInfo = HashMap.new
          			    stats = File.stat(dirname+'/'+flvName)
    

次に「main.groovy」・「main.js」・「main.py」・「main.rb」について見ていきます。

Linux認定資格 LPICを取るなら・・

Linux資格 「LPIC Lv1」徹底解説 連載目次

Recent News

Recent Tips

Tag Search