我很困惑为什么我不能使用OutputFormat.OUTPUT_FORMAT_MPEG2TS作为参数到MediaRecorder.setOutputFormat在android 2.3.6版本的设备上调用方法?如何指定在Android设备上的OUTPUT_FORMAT_MPEG2TS

在Android源有这样的代码位:

/**

* Defines the output format. These constants are used with

* {@link MediaRecorder#setOutputFormat(int)}.

*/

public final class OutputFormat {

/* Do not change these values without updating their counterparts

* in include/media/mediarecorder.h!

*/

private OutputFormat() {}

public static final int DEFAULT = 0;

/** 3GPP media file format*/

public static final int THREE_GPP = 1;

/** MPEG4 media file format*/

public static final int MPEG_4 = 2;

/** The following formats are audio only .aac or .amr formats **/

/** @deprecated Deprecated in favor of AMR_NB */

/** Deprecated in favor of MediaRecorder.OutputFormat.AMR_NB */

/** AMR NB file format */

public static final int RAW_AMR = 3;

/** AMR NB file format */

public static final int AMR_NB = 3;

/** AMR WB file format */

public static final int AMR_WB = 4;

/** @hide AAC ADIF file format */

public static final int AAC_ADIF = 5;

/** @hide AAC ADTS file format */

public static final int AAC_ADTS = 6;

/** @hide Stream over a socket, limited to a single stream */

public static final int OUTPUT_FORMAT_RTP_AVP = 7;

/** @hide H.264/AAC data encapsulated in MPEG2/TS */

public static final int OUTPUT_FORMAT_MPEG2TS = 8;

};

测试设备是三星Galaxy Note,显示Android版本2.3.6。

MediaRecorder.setAudioSource(7)调用不会引发错误,即使它也是隐藏选项(MediaRecorder.AudioSource.VOICE_COMMUNICATION == 7)。

MediaRecorder.setOutputFormat(8)调用抛出异常,丝毫日志的输出:

03-21 17:45:27.330: E/MediaRecorder(30622): setOutputFormat failed: -2147483648

下面是对MediaRecorder.setOutputFormat调用失败代码:

import java.io.IOException;

import android.app.Activity;

import android.content.pm.ActivityInfo;

import android.media.CamcorderProfile;

import android.media.MediaRecorder;

import android.os.Bundle;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.Window;

import android.view.WindowManager;

public class CameraStreamer extends Activity implements OnClickListener, SurfaceHolder.Callback

{

MediaRecorder recorder;

SurfaceHolder holder;

boolean recording = false;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

recorder = new MediaRecorder();

initRecorder();

setContentView(R.layout.main);

SurfaceView cameraView = (SurfaceView) findViewById(R.id.CameraView);

holder = cameraView.getHolder();

holder.addCallback(this);

holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

cameraView.setClickable(true);

cameraView.setOnClickListener(this);

}

private void initRecorder() {

recorder.setAudioSource(7); //MediaRecorder.AudioSource.VOICE_COMMUNICATION); //MediaRecorder.AudioSource.MIC);

recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

recorder.setOutputFormat(8); //MediaRecorder.OutputFormat.OUTPUT_FORMAT_MPEG2TS);

// for reference only

CamcorderProfile cpHigh = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);

int width=320, height=240;

recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);

recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

recorder.setVideoSize(width, height);

recorder.setVideoFrameRate(25);

recorder.setVideoEncodingBitRate(cpHigh.videoBitRate);

recorder.setAudioEncodingBitRate(cpHigh.audioBitRate);

recorder.setAudioChannels(1);

recorder.setAudioSamplingRate(cpHigh.audioSampleRate);

// recorder.setProfile(cpHigh); // This sets format, framerate, size, bitrate, channels, sampling rate, encoders

recorder.setOutputFile("/sdcard/videocapture_example.ts");

recorder.setMaxDuration(50000); // 50 seconds

recorder.setMaxFileSize(5000000); // Approximately 5 megabytes

}

private void prepareRecorder() {

recorder.setPreviewDisplay(holder.getSurface());

try {

recorder.prepare();

} catch (IllegalStateException e) {

e.printStackTrace();

finish();

} catch (IOException e) {

e.printStackTrace();

finish();

}

}

public void onClick(View v) {

if (recording) {

recorder.stop();

recording = false;

// Let's initRecorder so we can record again

initRecorder();

prepareRecorder();

} else {

recording = true;

recorder.start();

}

}

public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {

// TODO Auto-generated method stub

}

public void surfaceCreated(SurfaceHolder arg0) {

prepareRecorder();

}

public void surfaceDestroyed(SurfaceHolder arg0) {

if (recording) {

recorder.stop();

recording = false;

}

recorder.release();

finish();

}

}

2012-03-21

Alex

+0

你有没有解决过这个问题?我也有兴趣使用OUTPUT_FORMAT_MPEG2TS。 –

2013-09-20 17:34:59

android删除mpeg2,如何指定在Android设备上的OUTPUT_FORMAT_MPEG2TS相关推荐

  1. Android 系统的安全性分析(1)--移动设备上的安全威胁

    声明 最近工作上涉及到对Android系统安全性的改造,在改造之前先分析整理下目前Android系统自身的安全性: 参考了一些文章及书籍,在这里大部分是对别人描述的提炼,我挑出一些对我有用的内容整理: ...

  2. Android使用adb命令行卸载手机设备上的应用

    最近对Android设备在与命令行的交互之间有一定的兴趣,所以想学习一些使用adb卸载已安装应用的技巧. 准备工作:①电脑上需设置好Android ADB ②你的Android设备必须要能被你的电脑识 ...

  3. gnuradio android手机,如何搭配USRP在安卓设备上搭建GNU Radio

    原标题:如何搭配USRP在安卓设备上搭建GNU Radio 在这篇文章中,我们会使用安卓设备通过USB连接USRP.所以就需要USRP B2xx(B200, B210, 或者是 B200mini),这 ...

  4. android删除手机照片恢复软件,安卓手机上照片删除如何恢复?

    原标题:安卓手机上照片删除如何恢复? 安卓手机上的照片被删除了如何恢复?现在大部分手机都有手机最近删除相册,当发现手机上的数据被自己误删的时候,可以在手机最近删除相册中快速恢复.不过呢,最近删除的相册 ...

  5. Android 8.0适配指北

    本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发. Android适配系列: Android 6.0 的动态权限管理 Android 7.0脱坑指南 Android 8.0适配指北 ...

  6. android studio json插件_热门Android Studio 插件,这里是Top 20

    Android Studio是Google基于IntelliJ开发的一款功能强大的开发工具,它具有构建出色Android应用所需要的一切.借助基于IntelliJ IDEA的强大的功能,插件非常丰富. ...

  7. android java 调试工具_调试应用  |  Android 开发者  |  Android Developers

    Auto 如果您希望 Android Studio 自动为您要调试的代码选择最合适的选项,请选择此调试类型.例如,如果您的项目包含任何 C 或 C++ 代码,Android Studio 会自动使用 ...

  8. 如何彻底卸载\删除android设备上预装app

    作为apk开发人员,经常会遇到要在已预装自家apk的设备上调试新版的apk,这时候就会遇到签名冲突或者已安装错误提示 INSTALL_FAILED_ALREADY_EXISTS. 这个时候就需要卸载掉 ...

  9. gmail账户_如何从Android设备上删除Gmail帐户

    gmail账户 Justin Duino 贾斯汀·杜伊诺(Justin Duino) The only way to remove a Gmail account from your Android ...

最新文章

  1. 12/12团队会议10
  2. JVM垃圾回收3——参数详解(转载)
  3. python画圆形螺旋线_宝宝爱看小猪佩奇,很简单,让我们用python搞定它
  4. 数据分析:主成分分析(PCA)1
  5. 夜貓子”必需的!——融合夜視技術
  6. Slog15_支配vue框架模版语法之v-else
  7. 如何关闭文件服务器的同步,文件服务器同步
  8. Linux复制到home后自动删除,[rm] Linux 防止rm -rf / 误删除
  9. NTC热敏电阻的主要技术参数
  10. 手写一个springboot的starter
  11. 【oracle报错】ORA-01722:无效数字
  12. Java后端生成Echarts并渲染Word转PDF
  13. No module named 'pandas.lib'
  14. 用网页打开本地exe程序
  15. 构建高性能微服务架构(网易)
  16. linux修改盘符名
  17. wampserver的图标是绿色的,却显示“服务器离线,所有服务正常运行”?
  18. JWT实现单点登录(sso)功能
  19. 2021年还有哪些支持WebDAV的网盘?
  20. Keil MDK 工程输入中文汉字编译报错解决办法

热门文章

  1. 前10强中【8强出炉】!第二轮评审圆满完成
  2. smtp 发邮件(冒充邮件服务器跟QQ的服务器联系而发邮件从而不用密码)
  3. realloc函数和malloc函数区别
  4. 利用坐标数据求解七参数
  5. 今夕何夕 今天是2017年8月6日,农历闰六月十五。 小度独自凭栏,望着一轮圆月,发出了“今夕何夕,见此良人”的寂寞感慨。
  6. 【数据库与事务系列】分库分表中间件
  7. 集群01之xshell链接liux 更改ip 网关及dns 主机名称
  8. 97 个上传下载 PHP 源码
  9. GB/T 28046 道路车辆 电气及电子设备的环境条件和试验
  10. Termux设置——服务自启动