Coder Social home page Coder Social logo

lingxiaoplus / mobilecamera Goto Github PK

View Code? Open in Web Editor NEW
49.0 2.0 11.0 1.49 MB

camera开发,基于caamera1+mediacodec+mediaextractor+mediamuxer,使用官方原生的API逐步实现音视频的录制编解码,以及分离。从入门到放弃,从入门到转行,从入门到入土系列。

Java 9.60% CMake 0.21% C++ 85.41% Makefile 0.21% Python 3.38% C 0.54% Batchfile 0.11% Shell 0.32% Kotlin 0.22%
camera mediarecorder mediacodec-audiorecord

mobilecamera's Introduction

MobileCamera

camera入门系列,基于camera,后期换为camera2实现。主要实现的功能有:

  1. 相机预览画面
  2. 使用Mediacodec编码pcm格式数据为aac
  3. 使用Mediacodec解码aac格式数据为pcm
  4. 使用Mediacodec编码yuv格式数据为h264
  5. 使用MediaRecorder录制视频
  6. 使用Mediacodec+AudioRecord获取原始数据,使用MediaMuxer混合音视频数据并封装为mp4格式文件。

####使用方法:

使用之前添加权限:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />

在布局文件中加入:

<com.media.lingxiao.harddecoder.widget.CameraView
        android:id="@+id/mCameraView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:frame_width="1920"
        app:frame_height="1080"
        app:camera_back="true"
        />

切换相机:

CameraView mCameraView = findViewById(R.id.mCameraView);
mCameraView.changeCamera();

拍照:

mCameraView.takePicture(Environment.getExternalStorageDirectory().getAbsolutePath() + "/CameraPictures","demo.jpg");
mCameraView.setPicTakenListener(new CameraView.PictureTakenCallBack() {
            @Override
            public void onPictureTaken(String result, File file) {
                if (result.isEmpty()) {
                    Toast.makeText(getApplicationContext(), "保存成功", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
                } 
            }
        });

使用MediaRecorder录像:

if (mCameraView.isRecoder()){//先判断是否正在录制
            mCameraView.stopRecorde();
        }else {
            String filePath = ContentValue.MAIN_PATH + "/mediaRecorder_"
                    + getSystemTime() + ".mp4";
            mCameraView.startRecorde(filePath);
            Toast.makeText(getApplicationContext(), "文件保存在:" + filePath,
                    Toast.LENGTH_LONG).show();
        }

使用Mediacodec+AudioRecord混合录制,在录制之前先配置好参数:

private EncoderParams getVideoParams(){
        EncoderParams params = new EncoderParams();
        params.setAudioSampleRate(44100);
        params.setAudioBitrate(1024 * 100);
        params.setFrameWidth(mCameraView.getFrameWidth());
        params.setFrameHeight(mCameraView.getFrameHeight());
        params.setFrameRate(framerate);
        params.setVideoQuality(EncoderParams.MIDDLE_VIDEO_BIT_RATE);
        params.setAudioChannelConfig(AudioFormat.CHANNEL_IN_MONO);
        params.setAudioFormat(AudioFormat.ENCODING_PCM_16BIT);
        params.setAudioSouce(MediaRecorder.AudioSource.MIC);
        params.setVideoPath(ContentValue.MAIN_PATH + "/muxer_" + getSystemTime() + ".mp4");
        return params;
    }

if (!mCameraView.isRecoder()){
    mCameraView.startHardRecorde(getVideoParams());
    mBtnMuxer.setText("停止混合编码");
}else {
    mCameraView.stopHardRecorde();
    mBtnMuxer.setText("音视频混合");
}

mobilecamera's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

mobilecamera's Issues

项目无法初始化

win 10
as 3.6.3

executing external native build for cmake E:\android_demo\camera\MobileCamera\facedection\jni\CMakeLists.txt

FAILURE: Build failed with an exception.

* What went wrong:
executing external native build for cmake E:\android_demo\camera\MobileCamera\facedection\jni\CMakeLists.txt

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
com.intellij.openapi.externalSystem.model.ExternalSystemException: executing external native build for cmake E:\android_demo\camera\MobileCamera\facedection\jni\CMakeLists.txt
	at org.jetbrains.plugins.gradle.model.ProjectImportAction.addBuildModels(ProjectImportAction.java:252)
	at org.jetbrains.plugins.gradle.model.ProjectImportAction.execute(ProjectImportAction.java:127)
	at org.jetbrains.plugins.gradle.model.ProjectImportAction.execute(ProjectImportAction.java:48)
	at org.gradle.tooling.internal.consumer.connection.InternalBuildActionAdapter.execute(InternalBuildActionAdapter.java:77)
	at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner$ActionRunningListener.runAction(ClientProvidedPhasedActionRunner.java:120)
	at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner$ActionRunningListener.run(ClientProvidedPhasedActionRunner.java:110)
	at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner$ActionRunningListener.buildFinished(ClientProvidedPhasedActionRunner.java:104)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.event.DefaultListenerManager$ListenerDetails.dispatch(DefaultListenerManager.java:376)
	at org.gradle.internal.event.DefaultListenerManager$ListenerDetails.dispatch(DefaultListenerManager.java:358)
	at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
	at org.gradle.internal.event.DefaultListenerManager$EventBroadcast$ListenerDispatch.dispatch(DefaultListenerManager.java:346)
	at org.gradle.internal.event.DefaultListenerManager$EventBroadcast$ListenerDispatch.dispatch(DefaultListenerManager.java:333)
	at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42)
	at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:230)
	at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:149)
	at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
	at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:324)
	at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:234)
	at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:140)
	at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
	at com.sun.proxy.$Proxy13.buildFinished(Unknown Source)
	at org.gradle.initialization.DefaultGradleLauncher.finishBuild(DefaultGradleLauncher.java:179)
	at org.gradl

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.