使用 rtsp 在 java me 中实现视频流

Posted

技术标签:

【中文标题】使用 rtsp 在 java me 中实现视频流【英文标题】:Implement video streaming in java me using rtsp 【发布时间】:2012-08-27 06:27:09 【问题描述】:

我想使用 rtsp url 实现 video streaming in javame。在设备上测试代码时,我得到媒体异常声明Prefetch Error-33。这是我的代码

    private void startStreaming()
    
      try 
      
        mplayer=Manager.createPlayer(videourl);

        mplayer.addPlayerListener(this);

        mplayer.realize();

        videoControl=(VideoControl) mplayer.getControl("VideoControl");

        if(videoControl!=null)
        
            Item video=(Item) videoControl.initDisplayMode(videoControl.USE_GUI_PRIMITIVE, null);

            videoControl.setVisible(true);

            System.out.println("Playing");

            Form v=new Form("Playing Video");

            StringItem si=new StringItem("Status", "Playing....");

            v.append(video);

            display.setCurrent(v);
        

        mplayer.prefetch();

        mplayer.start();
     

    catch(Exception noCanDo)
    
        Form f=new Form("Error");

        f.append("Error : "+noCanDo);

        display.setCurrent(f);
    

我也尝试过使用 MIDlet.platformrequest(videourl) 方法的替代方法,该方法调用设备的默认内部播放器来播放视频文件。播放器正在启动,但稍后会出现connection timeout 提示。然而,我已经测试了 rtsp url,它工作得非常好。关于如何在 java me 中使用 rtsp url 进行视频流的任何建议?

【问题讨论】:

使用诺基亚开发者论坛维基文章在 j2me 中流式传输 RTSP 它应该适用于诺基亚 symbian belle sdk 1.1 和诺基亚 sdk 2.0 developer.nokia.com/Community/Wiki/… 【参考方案1】:

将此代码用于流式 RTSP,它应该适用于 nokia symbian belle sdk 1.1 和 nokia sdk 2.0

protected void startApp() throws MIDletStateChangeException 
        VideoCanvas VC = new VideoCanvas(this,url); 
        Display.getDisplay(this).setCurrent(VC); 

    
    //videoCanvas Class

    public VideoCanvas(ExampleStreamingMIDlet midlet, String url) 
            this.midlet = midlet;
            this.url = url;
            addCommand(start);
            addCommand(stop);
            addCommand(back);
            addCommand(exit);
            setCommandListener(this);
            this.setFullScreenMode(true);
        

    public void commandAction(Command c, Displayable arg1) 
            if(c == start) 
                start();
            




    public void start() 
            try

               Player player = Manager.createPlayer(url);
                player.addPlayerListener(this);
               player.realize();


                control = (VideoControl)player.getControl("VideoControl");
                if (control != null) 
                    control.initDisplayMode(VideoControl.USE_DIRECT_VIDEO,this);
                    control.setDisplaySize(176,144);
                    int width = control.getSourceWidth();
                    int height = control.getSourceHeight();
                    status2 = "Before: SW=" + width + "-SH=" + height + "-DW=" + control.getDisplayWidth() + "-DH=" + control.getDisplayHeight();
                

                player.start();
            
            catch(Exception e) 
                Alert erro = new Alert("Erro",e.getMessage(),null,AlertType.ERROR);
                Display.getDisplay(midlet).setCurrent(erro);
            
        

    public void stop() 
            if(player != null) 
                player.deallocate();
                player.close();
            
        

【讨论】:

谢谢,我试过了。但是,会发生带有预取错误的媒体异常。 我已经在真机、诺基亚 E71 和几款索尼爱立信手机上进行了测试,但得到了相同的结果。

以上是关于使用 rtsp 在 java me 中实现视频流的主要内容,如果未能解决你的问题,请参考以下文章

用 Java 实现 RTSP 媒体服务器

在 Laravel 4 中实现 Remember Me 函数会返回错误

WebRTC实现rtsp流在浏览器中播放

使用节点 js 的 RTSP 流式传输?

将RTSP流转换为虚拟网络摄像头

如何在 Flutter 中实现类似视频流和视频滚动的 Tiktok