在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android 录制视频

android 录制视频

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:2.01M
  • 下载次数:27
  • 浏览次数:261
  • 发布时间:2015-12-13
  • 实例类别:Android平台开发
  • 发 布 人:linfeng20113317
  • 文件格式:.rar
  • 所需积分:2
 相关标签: Android 视频 录制

实例介绍

【实例简介】
【实例截图】恩特我太晚

【核心代码】

package com.jake.camera;

import java.io.*;

import java.net.URL;

import java.net.MalformedURLException;

import java.awt.*;

import javax.swing.JFileChooser;

import javax.media.*;

import javax.media.control.*;

import javax.media.protocol.*;

import javax.media.format.VideoFormat;

import javax.swing.JPanel;

import javax.swing.JLabel;

import javax.swing.JToolBar;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.WindowConstants;

import java.awt.BorderLayout;

import java.awt.event.*;

public class MainFrame extends JFrame {

 /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	

	private JPanel centerPanel;

    private JLabel fileLabel;

    private JToolBar mainToolBar;

    private JLabel messageLabel;

    private JPanel northPanel;

    private JButton recordButton;

    private JPanel southPanel;

    

    private CamDataSource dataSource;

    private DataSource camSource;

    private DataSource recordCamSource;

    private DataSink dataSink;

    private Processor processor;

    private Processor recordProcessor;

    private CamStateHelper playhelper;

    

    private JFileChooser movieChooser;

    

    public MainFrame(CamDataSource dataSource) {

     

        this.dataSource = dataSource;

        this.dataSource.setParent(this);

        camSource = dataSource.cloneCamSource();

        

        initComponents();

        try{

            processor = Manager.createProcessor(camSource);

        }catch (IOException e) {

            JOptionPane.showMessageDialog(this, 

              "Exception creating processor: "   e.getMessage(), "Error", JOptionPane.WARNING_MESSAGE);

            return;

        }catch (NoProcessorException e) {

            JOptionPane.showMessageDialog(this, 

               "Exception creating processor: "   e.getMessage(), "Error", JOptionPane.WARNING_MESSAGE);

            return;

        }

        

        playhelper = new CamStateHelper(processor);

        if(!playhelper.configure(10000)){

            JOptionPane.showMessageDialog(this, 

               "cannot configure processor", "Error", JOptionPane.WARNING_MESSAGE);

            return;

        }

        checkIncoding(processor.getTrackControls());

        processor.setContentDescriptor(null);

        if(!playhelper.realize(10000)){

            JOptionPane.showMessageDialog(this, 

               "cannot realize processor", "Error", JOptionPane.WARNING_MESSAGE);

            return;

        }

        

        setJPEGQuality(processor, 1.0f);

        processor.start();

        

        processor.getVisualComponent().setBackground(Color.gray);

        centerPanel.add(processor.getVisualComponent(), BorderLayout.CENTER);//视频面板

        centerPanel.add(processor.getControlPanelComponent(), BorderLayout.SOUTH);//视频控制面板

    }

    

    //界面初始化

    private void initComponents() {

        northPanel = new JPanel();

        messageLabel = new JLabel();

        southPanel = new JPanel();

        mainToolBar = new JToolBar();

        recordButton = new JButton();

        fileLabel = new JLabel();

        centerPanel = new JPanel();

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        setTitle("本地视频");

        addWindowListener(new java.awt.event.WindowAdapter() {

            public void windowClosing(WindowEvent evt) {

                formWindowClosing(evt);

            }

        });

        northPanel.setLayout(new BorderLayout());

        messageLabel.setText("状态:");

        northPanel.add(messageLabel, BorderLayout.SOUTH);

        getContentPane().add(northPanel, BorderLayout.NORTH);

        southPanel.setLayout(new BorderLayout());

        recordButton.setText("录制");

        recordButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent evt) {

                recordButtonActionPerformed(evt);

            }

        });

        mainToolBar.add(recordButton);

        fileLabel.setText("文件:");

        mainToolBar.add(fileLabel);

        southPanel.add(mainToolBar, BorderLayout.CENTER);

        getContentPane().add(southPanel, BorderLayout.SOUTH);

        centerPanel.setLayout(new BorderLayout());

        getContentPane().add(centerPanel, BorderLayout.CENTER);

        pack();

    }

    

    private void formWindowClosing(java.awt.event.WindowEvent evt) {

     processor.close();

    }

    

    //录制当前视频

    private void recordButtonActionPerformed(java.awt.event.ActionEvent evt) {

      

        if(recordButton.getText().equals("录制")){

            fileLabel.setText("文件:");

            if (movieChooser == null) movieChooser = new JFileChooser();

            movieChooser.setDialogType(JFileChooser.SAVE_DIALOG);

            //Add a custom file filter and disable the default

            //(Accept All) file filter.

            movieChooser.addChoosableFileFilter(new MOVFilter());

            movieChooser.setAcceptAllFileFilterUsed(false);

            movieChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

            int returnVal = movieChooser.showDialog(this, "录制");

            if (returnVal == JFileChooser.APPROVE_OPTION) {

                File file = movieChooser.getSelectedFile();

                if(!file.getName().endsWith(".mov") &&!file.getName().endsWith(".MOV")) 
                	file = new File(file.toString()   ".mov");

                recordToFile(file);

                fileLabel.setText("文件:"   file.toString());

                recordButton.setText("停止");

            }

        }else{

            stopRecording();

            recordButton.setText("录制");

        }

    }

    

    void setJPEGQuality(Player p, float val) {

        Control cs[] = p.getControls();

        QualityControl qc = null;

        VideoFormat jpegFmt = new VideoFormat(VideoFormat.JPEG);

        

        // Loop through the controls to find the Quality control for

        // the JPEG encoder.

        for (int i = 0; i < cs.length; i  ) {

            if (cs[i] instanceof QualityControl && cs[i] instanceof Owned) {

                Object owner = ((Owned)cs[i]).getOwner();

                // Check to see if the owner is a Codec.

                // Then check for the output format.

                if (owner instanceof Codec) {

                    Format fmts[] = ((Codec)owner).getSupportedOutputFormats(null);

                    for (int j = 0; j < fmts.length; j  ) {

                        if (fmts[j].matches(jpegFmt)) {

                            qc = (QualityControl)cs[i];

                            qc.setQuality(val);

                            break;

                        }

                    }

                }

                if (qc != null) break;

            }

        }

    }

    

    public void checkIncoding(TrackControl track[]){

        for (int i = 0; i < track.length; i  ) {

            Format format = track[i].getFormat();

            if (track[i].isEnabled() && format instanceof VideoFormat) {

                Dimension size = ((VideoFormat)format).getSize();

                float frameRate = ((VideoFormat)format).getFrameRate();

                int w = (size.width % 8 == 0 ? size.width :(int)(size.width / 8) * 8);

                int h = (size.height % 8 == 0 ? size.height :(int)(size.height / 8) * 8);

                VideoFormat jpegFormat = new VideoFormat(

                   VideoFormat.JPEG_RTP, new Dimension(w, h), Format.NOT_SPECIFIED, Format.byteArray, frameRate);

                messageLabel.setText("状态: 视频将以"   jpegFormat.toString() "播放");

            }

        }

    }

    

    public void recordToFile(File file){

        URL movieUrl = null;

        MediaLocator dest = null;

        try{

            movieUrl = file.toURL();

            dest = new MediaLocator(movieUrl);

        }catch(MalformedURLException e){

            

        }

        

        recordCamSource = dataSource.cloneCamSource();

        try{

            recordProcessor = Manager.createProcessor(recordCamSource);

        }catch (IOException e) {

            JOptionPane.showMessageDialog(this, 

               "Exception creating record processor: "   e.getMessage(), "Error", JOptionPane.WARNING_MESSAGE);

            return;

        }catch (NoProcessorException e) {

            JOptionPane.showMessageDialog(this, 

               "Exception creating record processor: "   e.getMessage(), "Error", JOptionPane.WARNING_MESSAGE);

            return;

        }

        playhelper = new CamStateHelper(recordProcessor);

        if(!playhelper.configure(10000)){

            JOptionPane.showMessageDialog(this, 

               "cannot configure record processor", "Error", JOptionPane.WARNING_MESSAGE);

            return;

        }

        

        VideoFormat vfmt = new VideoFormat(VideoFormat.CINEPAK);

        (recordProcessor.getTrackControls())[0].setFormat(vfmt);

        (recordProcessor.getTrackControls())[0].setEnabled(true);

        recordProcessor.setContentDescriptor(new FileTypeDescriptor(FileTypeDescriptor.QUICKTIME));

        Control control = recordProcessor.getControl("javax.media.control.FrameRateControl");

        if ( control != null && control instanceof javax.media.control.FrameRateControl )

           ((javax.media.control.FrameRateControl)control).setFrameRate(15.0f);

        if(!playhelper.realize(10000)){

            JOptionPane.showMessageDialog(this, 

               "cannot realize processor", "Error", JOptionPane.WARNING_MESSAGE);

            return;

        }

        

        try {

            if(recordProcessor.getDataOutput()==null){

                JOptionPane.showMessageDialog(this, 

                   "No Data Output", "Error", JOptionPane.WARNING_MESSAGE);

                return;

            }

            dataSink = Manager.createDataSink(recordProcessor.getDataOutput(), dest);

            recordProcessor.start();

            dataSink.open();

            dataSink.start();

        } catch (NoDataSinkException ex) {

            JOptionPane.showMessageDialog(this, 

               "No DataSink "   ex.getMessage(), "Error", JOptionPane.WARNING_MESSAGE);

        } catch (IOException ex) {

            JOptionPane.showMessageDialog(this, 

               "IOException "   ex.getMessage(), "Error", JOptionPane.WARNING_MESSAGE);

        }

    }

    

    public void stopRecording(){

        try {

            recordProcessor.close();

            dataSink.stop();

            dataSink.close();

        } catch (IOException e) {

            JOptionPane.showMessageDialog(this, 

               "cannot stop recording "   e.getMessage(), "Error", JOptionPane.WARNING_MESSAGE);

        }

    }



   



}

标签: Android 视频 录制

实例下载地址

android 录制视频

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警