标签: video-encoding

android中的H264编码器?

在尝试修复简单的视频录制应用程序*时,我遇到了一些问题.我想我正确地遵循了一系列步骤.以下是对我提出问题的代码部分的简化.按下按钮后,此代码仅作为回调执行:

if ( mRecorder != null){
    mRecorder.reset();
    mRecorder.release();
}
mRecorder = new MediaRecorder();
if(mViewer.hasSurface){
    mRecorder.setPreviewDisplay(mViewer.holder.getSurface());
    Log.d(TAG,"Surface has been set");
}
try {
    Log.d(TAG,"Sleeping for 4000 mili");
    Thread.sleep(4000);
    Log.d(TAG,"Waking up");
} catch (InterruptedException e) {
    Log.e(TAG,"InterruptedException");
    e.printStackTrace();
}
mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);  
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setVideoFrameRate(12);
mRecorder.setVideoSize(176, 144);
mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setMaxDuration(MAX_DURATION_TEST);

String targetFile = "/sdcard/webcamera/temp.mp4";
File localFile = new File(targetFile);
if(localFile.exists()){
    Log.d(TAG,"Local file exists");
}else{
    Log.d(TAG,"Local file does not exist");
}
mRecorder.setOutputFile(targetFile);
try {
    mRecorder.prepare();
    bPrepared = true;
    Log.i(TAG,"prepared");
    return;
} catch (IllegalStateException e) { …
Run Code Online (Sandbox Code Playgroud)

android codec video-encoding h.264 video-recording

10
推荐指数
1
解决办法
2万
查看次数

结合来自ffmpeg的两个视频

我想结合两个mp4视频,使用ffmpeg形成一个mp4视频.

到目前为止我尝试过的是

ffmpeg -i input1.mp4 -i input2.mp4 output.mp4
Run Code Online (Sandbox Code Playgroud)

但是,每次我使用第一个输入的视频编解码器获取视频而不是另一个.我该如何结合它们?任何想法都将受到高度赞赏.

video ffmpeg centos video-encoding

10
推荐指数
5
解决办法
2万
查看次数

视频录制到Android上的循环缓冲区

我正在寻找最佳方式(如果有的话)将连续视频捕获到SD卡上的循环缓冲区,允许用户在事件发生后捕获事件.

标准视频录制API允许您直接写入文件,当您达到限制(由用户设置或SD卡的容量)时,您必须停止并重新开始录制.这将创建长达2秒的长窗口,其中录制未运行.这就是DailyRoads Voyager等现有应用已经做过的事情.为了最大限度地减少丢失重要事物的可能性,你可以将分裂时间设置为很长的时间,比如10分钟,但是如果事件发生在接近这个时间跨度的末尾,你就会在开始时存储9分钟的空间而浪费空间.

所以,我现在的想法如下:我将有一个大文件作为缓冲区.我将使用我发现的一些代码来捕获帧并将它们保存到文件中,最后包裹.当用户想要保留一些部分时,我会通过指向缓冲区的开头和结尾的标记来标记它.录制可以像以前一样继续,跳过标记为保留的区域.

录制停止后,或者在后台线程中(取决于手机/卡的速度),我会将标记的区域复制到另一个文件并删除覆盖保护.

主要问题,如果您不关心上述细节:我似乎无法找到将各个帧转换为Android SDK中的视频文件的方法.可能吗?如果没有,是否有任何可用的库,可能是本机代码,可以做到这一点?

我并不关心未压缩帧的大缓冲区,但导出的视频应该以Android友好的格式压缩.但是,如果有一种压缩缓冲区的方法,我想听听它.

谢谢.

android video-capture continuous circular-buffer video-encoding

10
推荐指数
1
解决办法
4321
查看次数

Android如何录像,上传,转码,下载,播放

我正在研究Android(2.2)应用程序/服务的开发,这将使用户能够在他们的手机上录制短片(我强调短片,<30秒),然后将该视频(HTTP)上传到服务器,然后转码视频到其他格式.该用户可以从其他Android用户下载视频并播放它们.

现在,我对每个人推荐的方法都有点失落,因为我没有在一个有凝聚力的环境中看到任何问题.理想情况下,我想要一个非商业解决方案(因为视频托管/转码不需要供应商/服务),但是,随意将这些作为推荐(我将其标记为维基),因为我知道很多人喜欢在这一切中使用youtube和vimeo作为中间层.

问题是

  • 您建议使用哪些服务器技术进行托管和转码?
  • 您推荐哪种技术用于流式传输视频(根据用户网络连接提供高质量和低质量编码会很不错)
  • 您建议使用哪种视频格式和软件将服务器上传的视频转换为其他Android用户以后可以查看的内容.
  • 我假设在上传之前对电话进行任何转码是很糟糕的(电池/触发器问题),但是,如果我错误的假设你推荐什么?

    一些可能对你有帮助的事情......

  • 该视频只需要在Android设备上呈现,并且将来需要在webkit html5浏览器中呈现.
  • 带宽并不便宜(即使有大量30秒的视频),因此视频质量和视频文件大小的良好组合非常重要(如果需要流式传输以确保质量与下载).
  • 这适用于Android 2.2设备,当然还有800x400分钟的中高密度屏幕.
  • 开源解决方案(用于接收上载的服务器,用于执行转码的代码,用于执行流式传输的服务器)是首选,但不是必需的.
  • CDN是一种选择,但我认为现在没有真正的数字.

  • video android video-encoding video-streaming

    9
    推荐指数
    1
    解决办法
    3020
    查看次数

    您今天会选择哪种视频流媒体平台?

    我们已经决定是时候放弃在我们的网站属性上部署视频的临时方法,并选择一个或多个视频平台来为我们处理这项任务.高级要求是:

    • 需要有一个易于安装和嵌入播放器.
    • 需要上传和转换现有视频.
    • 需要强大的分析,最好与谷歌分析集成.
    • 需要具备"罐装"视频(即 - 视频点播)和直播流(即 - 直播活动).

    其他一些可能会使平衡倾斜的事情:

    • 移动友好.
    • 多比特流式传输.
    • 灵活的API.

    自己托管不是一种选择 - 我们只是没有人力来照顾/喂养它.价格不是主要对象.

    那么,你会选谁?

    video-encoding video-streaming cloud-hosting

    9
    推荐指数
    1
    解决办法
    2172
    查看次数

    C#中的H.264(或类似)编码器?

    有谁知道C#(或任何其他托管语言)的开源H.264编码器?我也许可以使用python实现.

    我发现的库(例如x264)是用非常低级别的c(用大量宏程序编写)和汇编编写的.调整它们的结果远比我想象的要复杂得多.我的项目不关心性能或兼容性.我们只想测试一些想法会如何影响输出视频的感知.

    如果需要,我们愿意为代码付费或许可.

    提前致谢!

    编辑 - 一些要点:

    1. 我根本不关心性能(例如实时编码).编码所有我关心可能需要10天.
    2. 包装器没有帮助,因为我想实际修改编码器本身.

    c# video-encoding h.264

    9
    推荐指数
    1
    解决办法
    1万
    查看次数

    iPad不会使用HTML5呈现H.264视频

    我有一些H.264编码的视频,它们在Web浏览器中正确呈现HTML5,但无法在iPad上正确呈现.当我使用从互联网上下载的H.264视频时,我的视频在iPad上正确呈现,因此它不是HTML问题.

    这是关于我的视频的ffmpeg信息 -

    我原来的.mov视频:

    似乎流1编解码器帧速率与容器帧速率不同:6000.00(6000/1) - > 30.00(30/1)

    从'a_video.mp4'输入#0,mov,mp4,m4a,3gp,3g2,mj2:

    元数据:

    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    
    Run Code Online (Sandbox Code Playgroud)

    持续时间:00:00:42.74,开始:0.000000,比特率:220 kb/s

    Stream #0.0(eng): Audio: aac, 44100 Hz, stereo, s16, 94 kb/s
    Stream #0.1(eng): Video: h264, yuv420p, 762x464, 122 kb/s, 30 fps, 30 tbr, 3k tbn, 6k tbc
    
    Run Code Online (Sandbox Code Playgroud)

    使用Handbrake将我的.mov转换为mp4后,却无法在iPad上渲染:

    似乎流0编解码器帧速率与容器帧速率不同:180000.00(180000/1) - > 29.97(30000/1001)

    从'a_video.m4v'输入#0,mov,mp4,m4a,3gp,3g2,mj2:

    元数据:

    major_brand     : mp42  
    minor_version   : 0
    compatible_brands: mp42isomavc1  
    encoder: HandBrake 0.9.5 2011010300  
    
    Run Code Online (Sandbox Code Playgroud)

    持续时间:00:00:42.77,开始:0.000000,比特率:169 kb/s

    流#0.0(UND):视频:H264,YUV420P,752x464 [PAR 381:376 DAR 381:232],35 kb/s的,PAR 145161:141376 DAR 145161:87232,29.97,29.97 TBR,90K TBN,180K TBC
    流#0.1(eng):音频:aac,44100 …

    html5 ffmpeg video-encoding ipad ios

    9
    推荐指数
    1
    解决办法
    5444
    查看次数

    使用GStreamer将视频转换为WebM

    GStreamer的文档令人困惑.这仍然是诉诸StackOverflow.com的借口,但仍然是:

    什么是将任何视频文件(从任何格式)转换为WebM(+ WebM音频)的GStreamer命令行?

    这是我能找到的唯一文档.

    我被困在某个地方 gst-launch-0.10 webmmux name=mux ! filesrc location=oldfile.ext ! filesink location=newfile.webm ! name=demux ! demux. ! ffmpegcolorspace ! vp8enc ! queue ! mux.video_0 ! demux. ! progressreport ! audioconvert ! audiorate ! vorbisenc ! queue ! mux.audio_0

    WARNING: erroneous pipeline: link without source element知道如何让这件事情继续下去.

    这非常令人沮丧.

    请帮忙,谢谢.:)

    video video-encoding gstreamer webm

    8
    推荐指数
    1
    解决办法
    1万
    查看次数

    如何将.mp4视频与.wav音频和ffmpeg中的偏移量从命令行组合?

    我有一个mp4格式的电视片段,包含音频和视频,以及一个WAV audio_commentary轨道.

    我一直在尝试将它们组合在ffmpeg中,然后使用flash播放器在线播放(只能采用h264格式)

    完成此任务的最佳ffmpeg命令是什么?我的输入是MP4视频,WAV音频和以秒为单位的偏移量,音频评论开始的时间相对于mp4视频的开始.

    我试过了

    ffmpeg -i input_audio.wav -i input_vid.mp4 -vcodec copy output.mp4
    
    Run Code Online (Sandbox Code Playgroud)

    ffmpeg -vcodec copy -ss offset -i input_audio.wav -i input_video.mp4 output.mp4
    
    Run Code Online (Sandbox Code Playgroud)

    下面这些做我想做的事情并以h264格式输出对闪存播放器有利的视频 - 有没有办法在ffmpeg中从命令行执行此操作?

    mp4 ffmpeg wav jwplayer video-encoding

    8
    推荐指数
    1
    解决办法
    1万
    查看次数

    如何检查Android MediaCodec是否支持恒定质量模式

    我有一个屏幕录制应用程序,它使用MediaCodec编码器对视频帧进行编码.这是我检索视频编码器的一种方法:

    videoCodec = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_VIDEO_AVC);
    
    Run Code Online (Sandbox Code Playgroud)

    然后我尝试确定此编码器支持的最佳比特率模式,我的优先顺序是"恒定质量"模式,可变比特率模式,恒定比特率模式.这是我尝试这样做的方式:

    MediaCodecInfo.CodecCapabilities capabilities = videoCodec.getCodecInfo().getCapabilitiesForType(MediaFormat.MIMETYPE_VIDEO_AVC);
    MediaCodecInfo.EncoderCapabilities encoderCapabilities = capabilities.getEncoderCapabilities();
    
    if (encoderCapabilities.isBitrateModeSupported(MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_CQ)) {
        Timber.i("Setting bitrate mode to constant quality");
        videoFormat.setInteger(MediaFormat.KEY_BITRATE_MODE, MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_CQ);
    } else if (encoderCapabilities.isBitrateModeSupported(MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_VBR)) {
        Timber.w("Setting bitrate mode to variable bitrate");
        videoFormat.setInteger(MediaFormat.KEY_BITRATE_MODE, MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_VBR);
    } else if (encoderCapabilities.isBitrateModeSupported(MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_CBR)) {
        Timber.w("Setting bitrate mode to constant bitrate");
        videoFormat.setInteger(MediaFormat.KEY_BITRATE_MODE, MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_CBR);
    }
    
    Run Code Online (Sandbox Code Playgroud)

    在我的三星Galaxy S7上运行它最终选择VBR模式,即据说不支持恒定质量模式.但是,如果我只是将BITRATE_MODE设置为恒定质量,它不仅可以工作,而且实际上可以产生比VBR模式更高质量的视频.

    因此,如果此编码器显然支持恒定质量模式,为什么我会从isBitrateModeSupported()获得误报?我在这里错过了什么吗?

    android video-capture video-encoding mediacodec

    8
    推荐指数
    1
    解决办法
    814
    查看次数