`
rcyl2003
  • 浏览: 236660 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JMF(视频传输)

阅读更多
//转自:陈开源的专栏
/**//*在coogo上面看到有人在做项目,是多人视频聊天系统。要我做的感觉是很麻烦的一块。视频传输。我是还没有接触过jmf啊。一开始的时候就是只能捕获摄像头,怎么都不能传输,网络上面这方面的资料也比较上,找了很就都没有找到。没有办法,只有到sun公司去看JMF 2.1.1 Solutions。看了半天的例子,终于算是拼凑出来了。现在的问题就是可以传输,但是本地的影像却看不见了,只能看见远端的。*/

代码如下:

package jmfsample;


import java.io.*;
import javax.media.*;
import javax.media.util.*;
import javax.media.format.*;
import javax.media.control.*;
import javax.media.control.TrackControl;
import javax.media.protocol.DataSource;
import javax.media.protocol.ContentDescriptor;
import javax.media.protocol.PushBufferDataSource;
import javax.media.protocol.PushBufferStream;
import javax.media.control.QualityControl;
import javax.media.rtp.*;
import javax.media.rtp.rtcp.*;
import com.sun.media.rtp.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;

public class JmfV extends JFrame
...{
    
public static Player player=null;
    
private CaptureDeviceInfo di=null;
    
private MediaLocator locator=null;
    String str1
="vfw:Logitech USB Video Camera:0";
    String str2
="vfw:Microsoft WDM Image Capture (Win32):0";
    
private Processor processor = null;
    
private RTPManager rtpMgrs[];
    
private DataSource dataOutput = null,ds=null,ds_1=null;
    
private String ipAddress;
    
private int portBase;
    
public JmfV( String ipAddress,
    String pb,
    Format format )
    
...{
     
this.ipAddress = ipAddress;
     Integer integer 
= Integer.valueOf(pb);
     
if (integer != null)
         
this.portBase = integer.intValue();
        di
=CaptureDeviceManager.getDevice(str2);
        locator
=di.getLocator();
        
try
        
...{
            dataOutput
=Manager.createDataSource(locator);  
            player
=Manager.createRealizedPlayer(ds);
            player.start();
            Component comp
=null,comp_v=null;
            
if((comp=player.getControlPanelComponent())!=null)
            
...{
                
this.getContentPane().add(comp,"North");
                
if((comp_v=player.getVisualComponent())!=null)
                    
this.getContentPane().add(comp_v,"Center");
            }
 
            ds
=Manager.createCloneableDataSource(dataOutput);
            
this.setSize(320,320);
            
this.setVisible(true);
            
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
catch(Exception e )
        
...{
            e.printStackTrace();
        }

    }

    
public synchronized String start() ...{
     String result;

     
// Create a processor for the specified media locator
     
// and program it to output JPEG/RTP
     result = createProcessor();
     
if (result != null)
         
return result;

     
// Create an RTP session to transmit the output of the
     
// processor to the specified IP address and port no.
     result = createTransmitter();
     
if (result != null...{
         processor.close();
         processor 
= null;
         
return result;
     }


     
// Start the transmission
     processor.start();
     
     
return null;
        }


    
        
public void stop() ...{
     
synchronized (this...{
         
if (processor != null...{
      processor.stop();
      processor.close();
      processor 
= null;
      
for (int i = 0; i < rtpMgrs.length; i++...{
          rtpMgrs[i].removeTargets( 
"Session ended.");
          rtpMgrs[i].dispose();
      }

         }

     }

        }


        
private String createProcessor() ...{
     
if (locator == null)
         
return "Locator is null";
     
// Try to create a processor to handle the input media locator
     try ...{
         processor 
= javax.media.Manager.createProcessor(ds);
     }
 catch (NoProcessorException npe) ...{
         
return "Couldn't create processor";
     }
 catch (IOException ioe) ...{
         
return "IOException creating processor";
     }


     
// Wait for it to configure
     boolean result = waitForState(processor, Processor.Configured);
     
if (result == false)
         
return "Couldn't configure processor";

     
// Get the tracks from the processor
     TrackControl [] tracks = processor.getTrackControls();

     
// Do we have atleast one track?
     if (tracks == null || tracks.length < 1)
         
return "Couldn't find tracks in processor";

     
// Set the output content descriptor to RAW_RTP
     
// This will limit the supported formats reported from
     
// Track.getSupportedFormats to only valid RTP formats.
     ContentDescriptor cd = new ContentDescriptor(ContentDescriptor.RAW_RTP);
     processor.setContentDescriptor(cd);

     Format supported[];
     Format chosen;
     
boolean atLeastOneTrack = false;

     
// Program the tracks.
     for (int i = 0; i < tracks.length; i++...{
         Format format 
= tracks[i].getFormat();
         
if (tracks[i].isEnabled()) ...{

      supported 
= tracks[i].getSupportedFormats();

      
// We've set the output content to the RAW_RTP.
      
// So all the supported formats should work with RTP.
      
// We'll just pick the first one.

      
if (supported.length > 0...{
     &nbs
分享到:
评论

相关推荐

    JMF视频传输

    【JMF视频传输】是指利用Java Media Framework (JMF) 实现的网络视频传输技术,它结合了实时传输协议RTP (Real-Time Transport Protocol) 和实时传输控制协议RTCP (Real-Time Transport Control Protocol) 来确保高...

    JMF视频传输技术在Web机器人中的应用.pdf

    本文将探讨JMF视频传输技术在Web机器人中的具体应用,以及它如何解决信号传输时延问题,并提升远程操作的稳定性和透明性。 首先,JMF视频传输技术允许Web机器人捕获实时视频流并将其传输至远程操作者的控制界面。...

    jmf rtp 传输视频例子

    在这个"jmf rtp 传输视频例子"中,我们将探讨如何使用JMF和RTP来实现实时视频传输。 首先,我们需要理解JMF的基本工作原理。JMF提供了一个服务接口,允许开发者注册媒体处理器、捕获设备以及播放器。通过这些接口,...

    jmf音视频传输

    在这个框架中,有几个核心的类和概念,它们是实现音视频传输的关键。 1. **截取设备(CaptureDeviceInfo)**: 截取设备类用于获取系统中可用的音视频输入设备信息,如摄像头或麦克风。通常,这些设备信息会被存储...

    java利用JMF框架实现视频传输的完整代码

    本资源提供了一个基于JMF实现视频传输的完整代码示例,有助于理解JMF的使用方法和视频传输的实现过程。 首先,了解JMF的基本架构。JMF由三部分组成:核心组件、服务提供商接口(SPI)和应用程序编程接口(API)。...

    jmf 视频采集与传输源代码

    在这个“jmf视频采集与传输源代码”压缩包中,我们可以找到与使用JMF进行视频采集和传输相关的源代码。这个资源对于开发者来说非常有价值,特别是那些在Java环境中进行多媒体应用开发的人员。 首先,我们要理解JMF...

    jmf rtp 视频音频传输聊天

    Java Media Framework (JMF) 和 Real-Time Transport Protocol (RTP) 是在开发视频音频传输聊天应用时常用的技术。本文将详细介绍这两个技术以及如何利用它们实现一个聊天应用。 **Java Media Framework (JMF)** ...

    jmf的视频聊天

    Java Media Framework(JMF)是Java平台上用于处理多媒体数据的一个框架,它允许开发者创建和播放音频、视频等多媒体内容。本文将深入探讨基于JMF的视频聊天软件开发,旨在帮助初学者和有经验的开发者更好地理解和...

    基于RTP实时传输协议的JMF多媒体传输 源代码

    基于RTP实时传输协议的JMF多媒体传输源代码 本资源是使用Java Media Framework(JMF)实现的基于实时传输协议(RTP)的多媒体传输源代码。该项目的主要功能是使用RTP协议来传输多媒体数据,并使用JMF来处理和播放...

    JMF-rtp.zip_JMF RTP_JMF_RTP_java rtp 摄像头_jmf_视频传输 java

    利用jmf进行rtp传输,在本地测试调用摄像头进行视频通讯 . 在Sender和Receiver中的main函数中,我把本地地址和远端地址都设置成本机的地址,...Sender的前两个注释是把视频传输换成音频传输;传输一分钟后结束(第76行

    JMF-RTP.rar_jmf_rtp java_rtp 语音视频_视频传输_视频语音

    虽然JMF RTP组合提供了一种实现音视频传输的方法,但也有其局限性。例如,JMF对新格式的支持有限,且性能可能不如现代库如Jitsi或WebRTC。此外,RTP本身不提供错误恢复机制,需要在应用层面进行额外处理。开发者可能...

    java 通过jmf播放视频简单demo

    总结起来,这个Java通过JMF播放视频的简单示例展示了如何利用JMF进行多媒体数据的传输和播放,涉及到网络通信、多媒体处理和Java对象的生命周期管理。虽然JMF在当前环境中可能不是首选,但它仍然是理解多媒体处理和...

    基于jmf的rtp传输demo

    【基于jmf的rtp传输demo】是一个演示项目,展示了如何使用Java Media Framework (JMF) 实现RTP(Real-time Transport Protocol)进行音频文件的实时传输。JMF 是一个开源框架,它允许开发者处理多媒体内容,如音频和...

    基于JMF的音视频聊天程序源代码

    标题中的“基于JMF的音视频聊天程序源代码”指的是使用Java Media Framework (JMF) 开发的一个可以实现音视频通信的应用程序。JMF是Java平台上的多媒体处理框架,它提供了一种支持音频、视频捕获、播放和流传输的...

    JMF的音视频聊天程序源代码附论文

    4. **网络传输**:JMF可以处理实时传输协议(RTP)和实时控制协议(RTCP),这使得基于JMF的聊天程序能够通过网络发送和接收音视频数据。 5. **多线程编程**:在处理多媒体数据时,JMF通常会使用多线程模型,以确保...

    JMF摄像头视频采集示例

    4. **视频存储**:由于网络传输功能被替换为保存到磁盘,这意味着开发者使用了JMF的`FileSink`接口或者类似的方法,将视频流转化为文件。这通常涉及设置输出格式(如AVI或MP4)和编码参数,然后启动一个`Controller`...

    JMF视频音频通信源码

    "JMF视频音频通信源码"项目显然是利用JMF来实现一个视频音频通信组件,这对于理解实时音视频通信的原理以及在Java环境中构建此类系统非常有价值。 在JMF中,主要涉及以下几个核心概念: 1. **Media Manager**:这...

Global site tag (gtag.js) - Google Analytics