[Android N]MediaRecorder系列之StagefrightRecorder录制TS流flow(一)

mediaRecorder参数设置

要录制出ts的码流,需要设置如下

      //设置audio的采集源
     mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);  
     // 设置从摄像头采集图像  
     mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);  
     // 设置视频文件的输出格式  
     // 必须在设置声音编码格式、图像编码格式之前设置  
     mRecorder.setOutputFormat(OUTPUT_FORMAT_MPEG2TS);  
     // 设置声音编码的格式  
     mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);  
     // 设置图像编码的格式  
     mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 
     //设置文件保存的路径
     mRecorder.setOutputFile(videoFile.getAbsolutePath()); 

     //多camera系统
     mRecorder.setCamera()
     mRecorder.setParameters() 

下面先看video的设置flow

setVideoSource

这个函数设定了mVideoSource是哪个source,这个变量在后面会被用到

status_t StagefrightRecorder::setVideoSource(video_source vs) {
    ALOGV("setVideoSource: %d", vs);
    if (vs < VIDEO_SOURCE_DEFAULT ||
        vs >= VIDEO_SOURCE_LIST_END) {
        ALOGE("Invalid video source: %d", vs);
        return BAD_VALUE;
    }

    if (vs == VIDEO_SOURCE_DEFAULT) {
        mVideoSource = VIDEO_SOURCE_CAMERA;
    } else {
        mVideoSource = vs;
    }

    return OK;
}

设置video的encoder是哪一个

status_t StagefrightRecorder::setVideoEncoder(video_encoder ve) {
    ALOGV("setVideoEncoder: %d", ve);
    if (ve < VIDEO_ENCODER_DEFAULT ||
        ve >= VIDEO_ENCODER_LIST_END) {
        ALOGE("Invalid video encoder: %d", ve);
        return BAD_VALUE;
    }

    mVideoEncoder = ve;

    return OK;
}

设置输出的格式是哪一种,mOutputFormat在后面能用到


status_t StagefrightRecorder::setOutputFormat(output_format of) {
    ALOGV("setOutputFormat: %d", of);
    if (of < OUTPUT_FORMAT_DEFAULT ||
        of >= OUTPUT_FORMAT_LIST_END) {
        ALOGE("Invalid output format: %d", of);
        return BAD_VALUE;
    }

    if (of == OUTPUT_FORMAT_DEFAULT) {
        mOutputFormat = OUTPUT_FORMAT_THREE_GPP;
    } else {
        mOutputFormat = of;
    }

    return OK;
}

prepare()

mediarecorder执行prepare,会将会把前面的东西都用到。

status_t StagefrightRecorder::prepare() {
    if (mVideoSource == VIDEO_SOURCE_SURFACE) {
        return prepareInternal();
    }
    return OK;
}

status_t StagefrightRecorder::prepareInternal() {
    ALOGV("prepare");
    if (mOutputFd < 0) {
        ALOGE("Output file descriptor is invalid");
        return INVALID_OPERATION;
    }
    // Get UID and PID here 
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值