MediaCodec视频流从相机的方向和颜色错误
我试图直接从相机为Android设备传输视频.到目前为止,我已经能够从Android摄像头的 OnPreviewFrame (BYTE []数据,相机)功能中捕获每个帧,然后对数据进行编码,然后成功地解码数据并显示在表面上.我将Android的 MediaCodec 用于编码和解码.但是,视频的颜色和方向不正确[ 90度旋转].搜索了一段时间后,我发现了此YV12Toyuv420packedSemiplanar函数 - 如果在将其传递给编码器之前,我在原始相机数据上使用此函数,则颜色呈正确发出,但仍然是90度旋转. public static byte[] YV12toYUV420PackedSemiPlanar(final byte[] input, final int width, final int height) { final int frameSize = width * height; final int qFrameSize = frameSize
0 2024-02-17
编程技术问答社区
为什么 "queueInputBuffer "中的 "MediaCodec CodecException "只发生在Android API 29上?
基本信息 targetsdkversion 28 目标:班级的目的是在发送到我的服务器之前调整视频大小. 问题:该应用仅在API 29上崩溃,无论是使用真实设备还是使用AVD.例如,该代码在 pixel 2 api 28 上正常工作,但在 pixel 2 api 29 上不正常. 源代码:我主要使用 错误消息(下面列出了详细日志): E/AndroidRuntime: FATAL EXCEPTION: Thread-20 Process: com.myapp.myapp, PID: 9189 android.media.MediaCodec$CodecException: Error 0xfffffff3 at android.media.MediaCodec.native_queueInputBuffer(Native Method) at android.media.MediaCodec.queueInput
0 2024-02-17
编程技术问答社区
从Surface编码时Adreno GPU上的编码器崩溃
我一直在这个问题上挣扎了一周以上,很可能是 Qualcomm GPU/硬件视频编码器中的错误.由于我们被迫发布该应用程序及其开发人员论坛没有提供任何反馈,所以我也在这里发布它,希望有人能够提供一些线索,甚至更好,甚至更好,以便编码器中的错误是未触发. 应用程序从表面进行编码.当将某些图像渲染到表面时,编码器会在同一位置失败(100%)(当前编码的框架是关键帧).碰撞点的编码器的logcat输出是(最后一行重复以非常高的速率): 11-26 11:41:33.312: E/OMX-VENC-720p(25949): ERROR: async_msg_process() - Error statuscode = 1 11-26 11:41:33.312: E/ACodec(29317): [OMX.qcom.video.encoder.avc] ERROR(0x80001009) 11-26 11:41:33.312: E/MediaCodec(29317): Codec rep
0 2024-02-17
编程技术问答社区
如何在安卓系统中流媒体时即时改变MediaCodec的编码比特率?
我想根据当前的网络动态地更改编码比特率,包括 h264和AAC . 如何动态地更新Android MediaCodec中的编码比特率? ps:我发现PARAMETER_KEY_VIDEO_BITRATE和setParameters可在API 19 上使用 即时更改视频编码器的目标比特率.该值是包含bps中新比特率的整数对象. 恒定值:"视频 - bitrate" setParameters 将其他参数传达给组件实例. 投掷 如果在非初始化的状态下,则违法. 有什么方法可以在API 19? 下进行操作 解决方案 停止编解码器,设置参数并重新启动其对我有用. 其他解决方案 您的格式需要支持自适应比特率.例如.我能够使用以下内容设置比特率.确保您处于API 19或以上.我将H264帧编码为FLV容器. Bundle bitrate = new Bundle(); bitrate.putInt(MediaCodec.PARAMET
2 2024-02-17
编程技术问答社区
通过MediaCodec API使QualComm编码器工作
我正在尝试使用Android MediaCodec API进行NV12流的硬件编码(AVC). 使用OMX.QCOM.VIDEO.ENCODER.AVC时,分辨率1280x720和640x480工作正常,而其他(即640x360,320x240,800x480)的其他作用均可换成Chroma成分的位置(请参阅我仔细检查了输入图像是通过将其保存到JPEG文件中正确的. 此问题仅发生在高通设备上(即三星Galaxy S4). 任何人都可以正常工作吗?需要其他设置/怪异吗? 解决方案 解码器(MediaCodec)具有媒体形式,可以使用其他解决方案 是的,omx.qcom.video.encoder.avc这样做,但在所有设备/Android版本上都不执行此操作.在我的Nexus 4上,Android 4.3编码器正常工作,但在我的S3(运行4.1) 上效果不佳 使用OMX.QCOM.VIDEO.ENCODER.AVC运行4.1的S3解决方案(看来某些S3具有另一个编
安卓MediaCodec在异步模式下的编码和解码
我正在尝试从文件中解码视频,并在API级别21及向上支持的新的 asynchronous Mode 中将其编码为其他格式(Android OS 5.0 Lollipop). 有很多示例可以在同步模式下进行此操作 在诸如我不需要在此过程中显示视频. 我相信,一般过程是用a MediaExtractor读取文件作为MediaCodec(解码器)的输入,允许解码器的输出渲染到Surface中,这也是共享的输入进入MediaCodec(编码器),然后最后通过MediaMuxer编写编码器输出文件. Surface是在编码器的设置期间创建的,并与解码器共享. 我可以将视频解码为TextureView,但是与编码器而不是屏幕共享Surface尚未成功. i设置了我的两个编解码器.我相信一个问题是,我不知道在编码器的回调onInputBufferAvailable()函数中该怎么做.我没有什么(或知道如何)将数据从Surface复制到编码器中 - 应该自动发生(就像在用code
从java安卓系统的图像序列中进行视频编码
我想仅在我当前的Android项目中使用Java从图像序列中编码视频.我的意思是不用任何外部工具,例如NDK. 另外,Java库是否有可用性用于编码图像序列的视频? 解决方案 您可以使用称为jcodec的纯Java库( http://jcodec.org ).它包含一个原始但有效的H.264(AVC)编码器和一个功能齐全的MP4(ISO BMF)Muxer. 这是使用低级API的更正代码样本: public void imageToMP4(BufferedImage bi) { // A transform to convert RGB to YUV colorspace RgbToYuv420 transform = new RgbToYuv420(0, 0); // A JCodec native picture that would hold source image in YUV colorspace Picture toEnc
0 2024-02-15
编程技术问答社区
如何使用Android MediaCodec编码相机数据(YUV420sp)
感谢您的重点! 我想使用Android MediaCodec API来编码从相机中使用的视频框架, 不幸的是,我没有成功!我仍然不熟悉MediaCodec API. 以下是我的代码,我需要您的帮助才能弄清楚我该怎么办. 1,相机设置: Parameters parameters = mCamera.getParameters(); parameters.setPreviewFormat(ImageFormat.NV21); parameters.setPreviewSize(320, 240); mCamera.setParameters(parameters); 2,设置编码器: private void initCodec() { try { fos = new FileOutputStream(mVideoFile, false); } catch (FileNotFoundException e) { e.pr
0 2024-02-13
编程技术问答社区
用安卓MediaCodec对相机进行H.264编码
我正在尝试使其在Android 4.1上工作(使用升级的Asus Transformer平板电脑).感谢 Alex对我以前的问题的回答,我已经能够将一些RAW H.264数据写入文件,但是该文件仅在ffplay -f h264上可以播放,并且似乎丢失了有关帧速率的所有信息(非常快速的播放).此外,颜色空间看起来不正确(使用摄像头侧面默认的ATM). public class AvcEncoder { private MediaCodec mediaCodec; private BufferedOutputStream outputStream; public AvcEncoder() { File f = new File(Environment.getExternalStorageDirectory(), "Download/video_encoded.264"); touch (f); try { outputStream = ne
0 2024-02-13
编程技术问答社区
从安卓系统执行.bat文件
我正在尝试执行xxx.bat文件以重命名我的Android应用程序 听到我的代码 Runtime.getRuntime().exec(Environment.getExternalStorageDirectory()+File.separator+"eduapp"+File.separator+"lock1.bat"); eduapp是目录,lock1.bat是我的蝙蝠文件和内容 ren /sdcard/eduapp .{ED7BA470-8E54-465E-825C-99712043E01C} 但是,当我运行应用程序时,它会像.. 一样流行错误 java.io.IOException: Error running exec(). Command: [/mnt/sdcard/eduapp/lock1.bat] Working Directory: null Environment: null 基本上我想隐藏一些文件夹. 是他们从SDCARD中运行.bat或
6 2024-02-07
编程技术问答社区
FFMpeg移动视频编码卡顿
我一直在玩FFMPEG和视频编码,即使我的MP4在台式机上的工作很棒,它们很顺利,等等,它们在移动设备上也很糟糕.他们口吃和加载非常缓慢,我正试图找出问题. 作为一个例子,我使用媒体元素插件制作了一个页面: http://mediaelementjs.com/我首先放置了Medialelementjs随附的视频,它运行良好,缩放到桌面和移动设备,并迅速加载并没有任何口吃. 但是,我加载了视频,它缓慢而充满了口吃,但仅在移动设备上.因此,我认为它可能是S3(托管的地方),但在本地保存了该文件. 我希望一个认识H.264和/或ffmpeg的人可以指向我的方向.这是我在ffmpeg上运行的当前命令: ffmpeg -i $input_file_name -vcodec libx264 -r 100 -bt 300k -ac 2 -ar 48000 -ab 192k -strict -2 -y $output_temp_file 2>&1 所以我错过了什么? 解
2 2024-02-06
编程技术问答社区
安卓4.4屏幕记录的API's?
Android 4.4(Kit Kat)是,它为开发人员提供了一种使用adb shell screenrecord捕获屏幕的MP4视频的方法. Android 4.4是否提供任何新的API,以供捕获和编码视频的应用程序,或者仅提供screenrecord实用程序/二进制? 我问,因为我想在正在编写的应用程序中进行一些屏幕截图工作.是的,在任何人询问之前,应用程序将具有FrameBuffer访问权限.但是,我见过的唯一的Android提供的捕获/编码API( mediarecorder /a>)似乎仅限于录制视频来自设备的相机. 我在StackoverFow上看到的唯一屏幕捕获解决方案似乎围绕着定期拍摄屏幕截图或使用JNI使用FFMPEG的移植版本来编码Framebuffer.有更优雅的本地解决方案吗? 解决方案 screenrecord实用程序使用私有API,因此您不能完全做 它做什么. 它的工作方式是创建虚拟显示,将虚拟显示路由到视频编码器,然后将输出保存到文
2 2024-02-05
编程技术问答社区
在安卓系统上使用javacv的ffmpeg编码视频会导致本地代码崩溃
注意:自从最初要求这个问题以反映我对将实时相机图像加载到ffmpeg库中所学的内容. 我正在使用javacv javacv编译为Android的ffmpeg来编码/解码我的应用程序. (请注意,最初,我试图使用ffmpeg-java,但是它有一些不兼容的库) 原始问题:我遇到的问题是我目前正在将每个框架作为Bitmap(只是一个普通的android.graphics.Bitmap),我不知道如何塞入编码器中. javacv's ffmpeg中的解决方案:使用avpicture_fill(),据说来自Android的格式是YUV420P,尽管我无法验证这一点,直到我的编码器问题(下)是固定的. avcodec.avpicture_fill((AVPicture)mFrame, picPointer, avutil.PIX_FMT_YUV420P, VIDEO_WIDTH, VIDEO_HEIGHT) 现在问题:实际编码数据的行崩溃了线程.我得到了我无法理解的大型
2 2024-02-05
编程技术问答社区
无法播放某些视频
我正在尝试从我们的服务器上的Android设备上播放电影.它不是媒体服务器,而只是普通的Apache服务器.我们使用相同的API访问iPhone上的视频,并且效果很好. 在Android设备上,某些视频工作,而其他视频则不行.它们都是以相同的方式创建的,除了大多数不起作用的方法是由静止图像和音频组成的. 我们尝试使用Videora重新编码它们,并尝试使用MP4Box暗示它们.存储在SD卡上时,所有视频都可以很好地播放.我们还尝试过首先将视频从服务器下载到SD卡,将其保存为文件,然后从文件中播放,但这也不起作用. 帮助会很棒.我很困惑. 谢谢. 编辑 - logcat: 01-19 08:19:12.669: DEBUG/MediaPlayer(1878): Couldn't open file on client side, trying server side 01-19 08:19:14.119: INFO/ActivityManager(1172):
0 2024-02-04
编程技术问答社区
使用setDataSource()时,实例化mediaextractor失败。
我正在尝试使用MediaExtract提取AVI文件的Track 0(视频跟踪),并使用MediaCodec编码为H264格式.这是我配置MediaCodec 的方式 public MediaCodec configure_codec(){ Log.d("OUT","configure starts"); MediaCodec codec = MediaCodec.createEncoderByType("video/avc"); MediaFormat format = MediaFormat.createVideoFormat("video/avc", 320, 240); format.setInteger(MediaFormat.KEY_BIT_RATE, 700000); format.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
2 2024-02-04
编程技术问答社区
在安卓系统上将视频录制到一个圆形缓冲区
我正在寻找最好的方法(如果有...)将连续视频捕获到SD卡上的圆形缓冲区,从而使用户可以在发生事件发生后捕获. 标准视频记录API允许您直接写入文件,当您达到限制(由用户设置或SD卡的容量设置)时,您必须停止并重新启动录制.这将创建至2秒的长窗口,其中录制未运行.这就是一些现有的应用程序(例如DailyRoads Voyager)已经做到的.为了最大程度地减少缺少重要的东西的机会,您可以将分裂时间设置为长时间的东西,但是如果事件发生在本时间pan的末端附近,则在开始时浪费了空间. P> 因此,我现在的想法如下:我有一个将用作缓冲区的大文件.我将使用一些我发现的代码来捕获帧并将它们保存到文件中,并在最后包裹.当用户想要保留一部分时,我将通过指针到缓冲区的起点和结束.录音可以像以前一样继续,跳过标有保留的区域. 停止录制后,或者在背景线程中(取决于电话/卡速度),我将把标记的区域复制到另一个文件并删除覆盖物保护. 主要问题,如果您不在乎上面的详细信息:我似乎找不到将单个帧
0 2024-02-03
编程技术问答社区
将一系列的图像编码成视频
如何从Android上的一系列图像/照片中创建视频文件? 可以使用当前的SDK完成吗?还是我需要编解码器库? 解决方案 我同意马克.在C/C ++库中,有ffmpeg 在这里或x264 在这里.我不得不说我找不到它们或易于使用的Android NDK,但这可能是因为我对C/C ++和JNI的了解不多.如果您对这条路线感兴趣,那么Android的Rockplayer免费应用程序可以将FFMPEG的预构建的共享库准备在Android上使用.他们声称这些图书馆仅使用LGPL组件,但我想您必须满足自己的需求.关于Java,有一个ffmpeg的端口,毫不奇怪,您可以访问在这里>但是,它仍然要求大部分现有的FFMPEG框架,因此您回到了NDK Land.可以使用Java Media Framework(JMF)将一系列图像转换为视频,但具有以下缺点: 视频格式数量有限. 不会产生可以在大多数(如果不是全部)Android手机上重新播放的视频,例如H264或MPEG4. JMF代码现
0 2024-01-28
编程技术问答社区
如何使用MediaCodec将位图编码成视频?
我想将一组我的位图编码为H264.这可以通过MediaCoder吗?我已经编写了一些代码来做到这一点,但是在我尝试过的任何媒体播放器中都无法播放输出.这是我主要是从我在Stackoverflow上发现的其他来源借来的一些代码. mMediaCodec = MediaCodec.createEncoderByType("video/avc"); mMediaFormat = MediaFormat.createVideoFormat("video/avc", 320, 240); mMediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 125000); mMediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15); mMediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.CO
0 2024-01-27
编程技术问答社区
我可以使用亚马逊Elastic Transcoder只创建缩略图吗?
我有一个使用Paperclip上传和存储视频在Amazon S3上的Rails应用程序.将视频文件转换为另一种格式,或添加水印,这并不是什么都不奇怪的.我只想从视频中创建缩略图以用作视频播放器上的海报图像. 我看到Amazon Elastic Transcoder允许创建免费的缩略图(或者,更确切地说,它们不用于缩略图创建),并且由于我已经使用了Amazon Services,我想看看我是否可以将其用于缩略图. 有人知道如何设置输入/输出选项,以便除缩略图外没有生成文件?我可以做以下操作吗? transcoder = AWS::ElasticTranscoder::Client.new transcoder.create_job( pipeline_id: APP_CONFIG[Rails.env][:pipeline_id], input: { key: VIDEOPATH, frame_rate: 'auto', resolution
0 2024-01-26
编程技术问答社区
从Grails控制器中渲染视频内容
毫无疑问,另一个愚蠢的新问题!我在Grails控制器中有一个字节数组,其中包含视频文件的内容(准确地说是 *.mp4文件).我熟悉如何从Grails Controller中渲染JSON,XML和其他基本类型,但找不到任何示例显示如何输出视频.本质上,我想做以下操作: render bytes as MP4 我意识到我可能需要一个结构,例如: render(text:"some xml",contentType:"video/mpeg",encoding:"UTF-8") ,但我不清楚如何将字节数组在那里获得.显然,我不是呈现像HTML般的内容的专家.我躲在图书馆的功能方面太久了!任何指向参考或示例的指示都将不胜感激. 因此,如果它有助于将建议指向正确的方向,那么带有视频的字节来自我使用JETS3T库阅读的S3对象. 解决方案 OutputStream out = response.getOutputStream()
8 2024-01-25
编程技术问答社区