Articles of h.264

Android编码器复用器:原始h264到mp4容器

我创建了一个h264原始video文件,我能够在Android 4.3及更高版本上与Android MediaMuxer进行复用。 现在我需要支持Android版本4.1和4.2。 我find了Jcodec。 这样做有一个例子: https://github.com/jcodec/jcodec/blob/master/samples/main/java/org/jcodec/samples/mux/AVCMP4Mux.java 但是我在第70行得到了java.nio.ReadOnlyBufferExceptionexception: H264Utils.encodeMOVPacket(数据); 我想这段代码不适用于Android? 我该如何解决。 熟悉Jcodec的人可以帮忙解决这个问题吗?

Android MediaCodec可以解码videoh264流吗?

我将使用Android MediaCodec解码h264video流,我想知道如何做到这一点。 提前致谢!

在Android上解码h264 ByteStream总是从dequeueOutputBuffer()获取INFO_TRY_AGAIN_LATER

尝试使用媒体编解码器解码编码数据克数据包,但在dequeueOutputBuffer()中始终获得-1。 请帮帮我 – 我做错了什么? 我试图面对这个问题几天没有成功。 private void decodeVideo(){ new Thread(new Runnable() { @Override public void run() { int n = 0; MediaFormat mediaFormat = new MediaFormat(); mediaFormat.setString(MediaFormat.KEY_MIME, “video/avc”); mediaFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 100000); mediaFormat.setInteger(MediaFormat.KEY_WIDTH, surfaceView.getWidth()); mediaFormat.setInteger(MediaFormat.KEY_HEIGHT, surfaceView.getHeight()); mediaFormat.setInteger( MediaFormat.KEY_PUSH_BLANK_BUFFERS_ON_STOP, 1); mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatL2);// TODO byte[] csd_info = { 0, 0, 0, 1, 103, 100, 0, 40, -84, 52, -59, […]

用alpha通道播放android原生video

android是否支持任何本机支持的video格式的alpha通道,或者是否有人知道它是否在管道中? 在3.0中的android中h.264可能有可能吗?

如何在Andoid exoplayer中播放原始NAL单元?

我知道exoplayer支持RTSP,但是我需要c ++代码才能在很多操作系统上运行,所以我需要在传递给exoplayer之前用C ++解析RTP数据包到NAL单元 我find了一种使用live555解码RTP数据包并提取其NAL单元的方法。 根据ExoPlayer的文档 : 所有ExoPlayer实现的通用组件是: MediaSource,用于定义要播放的媒体,加载媒体,以及从中读取加载的媒体。 在播放开始时通过ExoPlayer.prepare注入MediaSource。 … 所以我需要一个可以从我的C ++代码中提取NAL单元的自定义MediaSource 。 在MediaSource的类引用中,我们可以看到已经有一些MediaSource可用。 我可能也许SmoothStreaming MediaSource可以工作,但是没有描述它的确切function,在构造函数中我必须提供一个Uri或一个SsManifest (什么)。 我可以看到这个库中存在一个NAL单元实用程序 ,所以可能已经完成了一半 那么如何构建或使用已有的MediaSource读取NAL单元以供ExoPlayer播放? 作为附加组件,您如何将NAL单元从C ++传递到Java? 在代码中我发现它只是将它们存储在C ++缓冲区中。 我应该以某种方式用Java读取这个缓冲区吗? 更新: 我一直在研究这个图书馆的运作方式。 这一切都始于一个MediaSource ,它有像Extractor和DataSource这样的对象。 似乎ExtractorMediaSource是一个MediaSource ,您可以在其中提供自己的Extractor和DataSource 。 据我所知, DataSource是一个从任何可能的地方获取原始字节的类,无论是文件读取还是网络数据包。 根据库中可用的Extractor类(如Mp4Extractor和Mp3Extractor , Extractor可以解释从DataSource读取的DataSource 。 Extractor接口的两个主要方法是: void init(ExtractorOutput output) int read(ExtractorInput input, PositionHolder seekPosition) 我不知道什么是ExtractorInput和ExtractorInput ,但它们看起来很重要。 所以Extractor从DataSource读取,解析它并以通用格式发送给Renderer ? 我需要知道这种通用格式是如何解析我从自定义DataSource读取的NAL单元。

无法播放某些video

我正在尝试从我们的服务器在Android设备上播放电影。 它不是媒体服务器,只是常规的Apache服务器。 我们使用相同的API访问iPhone上的video,它工作正常。 在Android设备上,某些video有效,有些则无效。 它们都是以相同的方式创建的,除了大多数不工作的都由静止图像和音频组成。 我们尝试用Videora重新编码它们,并尝试用MP4Box暗示它们。 存储在SD卡上时,所有video都能完美播放。 我们还尝试首先将video从服务器下载到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): Displayed activity com.myproject/.VideoClass: 1966 ms (total 1966 ms) 01-19 08:19:15.779: ERROR/PlayerDriver(1071): Command PLAYER_INIT completed with an error or info UNKNOWN PVMFStatus 01-19 08:19:15.789: ERROR/MediaPlayer(1878): error (200, […]

Android无法播放H264 / AACvideo

我们正在iOS应用程序中录制video文件,并希望它们在iOS / Android / Web上播放。 所以我们选择了MP4容器中的H264 / AAC。 但是,在不同的设置中,iOS H264video不会在Android设备上播放(LG D335 / Galaxy S4)。 我们如何播放video? 简单的测试方法是从直接链接下载video,然后在Android设备上的下载中打开它。 对于任何iOS H264video,我们收到“无法播放此文件”/“抱歉,此video无法播放” Mediainfo的video文件如下。 想知道, 为什么这些video文件无法在Android上播放,而它是H264 / AAC和Baseline配置文件? 谢谢。 MediaInfo输出 iOS 1280×720: General Complete name : /Users/a/Desktop/ios_1280.mp4 Format : MPEG-4 Format profile : QuickTime Codec ID : qt File size : 6.46 MiB Duration : 1s 220ms Overall bit rate […]

如何设置MediaCodec对H.264video进行编码的平均+最大比特率?

我正在使用MediaCodec从摄像头编码H.264video,问题是,当我移动手机时,输出video的质量非常高,video中充满了马赛克/视觉块。 Belows是一些细节: 我的编码器比特率为500 kbps,比特率模式为BITRATE_MODE_VBR 。 我尝试将比特率更改为800 kbps,输出video质量提高了很多,如果我将比特率模式更改为BITRATE_MODE_CQ ,输出video质量是完美的,但比特率将增加到1400 kbps。 我想将平均比特率保持在低水平,例如500 kbps,但是当手机移动时允许比特率突发变为更大的比特率,例如800 kbps。 在iOS VideoToolBox中,有一个API kVTCompressionPropertyKey_DataRateLimits来设置平均比特率和最大比特率,但在Android中,我怎样才能实现平均最大比特率控制? 我注意到配置MediaCodec时有一个隐藏“max-bitrate”参数,但它没有效果(因为Android框架忽略了这个参数,请参阅http://androidxref.com/7.1.1_r6/xref/frameworks/av/ media / libstagefright / ACodec.cpp #configureCodec ),我也注意到有一个隐藏“质量”参数,但它也没有效果。

video使用OnAudioFilterRead数据编码错误

我正在尝试使用OnAudioFilterRead函数将Unity游戏音频录制到mp4文件。 function OnAudioFilterRead(var data:float[], var channels:int) 我的解决方案概述。 步骤1。 将从Unity获取的数据样本转换为bytes [] private void Convert2Bytes(float[] samples) { Int16[] intData = new Int16[samples.Length]; //converting in 2 float[] steps to Int16[], //then Int16[] to Byte[] Byte[] bytesData = new Byte[samples.Length * 2]; //bytesData array is twice the size of //dataSource array because a float converted in Int16 is 2 […]

Android H.264 BaseProfile级别支持

根据官方的android文档 ,android支持3.0+设备上的h.264基本配置文件,但它没有提到系统将支持哪​​些级别 。 有谁知道,或者这是否依赖于每个设备?