这是本问题的后续问题。
这是我的textureview
代码:
public class VideoTextureView extends TextureView implements SurfaceTextureListener{
private static final String LOG_TAG = VideoTextureView.class.getSimpleName();
private MediaCodecDecoder mMediaDecoder;
private MediaCodecAsyncDecoder mMediaAsyncDecoder;
public VideoTextureView(Context context, AttributeSet attrs) {
super(context, attrs);
setSurfaceTextureListener(this);
Log.d(LOG_TAG, "Video texture created.");
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
Log.d(LOG_TAG, "Surface Available: " + width + " x " + height);
mMediaDecoder = new MediaCodecDecoder();
mMediaDecoder.Start();
mMediaDecoder.SetSurface(new Surface(getSurfaceTexture()));
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
// TODO Auto-generated method stub
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
mMediaDecoder.Stop();
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
// TODO Auto-generated method stub
}
}
我的问题-我的textureview
实现对于呈现由mediacodec
解码的H264流是否可以?或者我需要做EGL设置或其他什么?
提前道谢!
我目前正在使用一个TextureView在android上使用集合视图单元格在一个活动中呈现多个流(对不起,这里有ios术语)。
它工作得很好,但问题是,例如,当您旋转设备时,会出现surface_destroy,然后是surface_available。正如我所看到的,您正确地停止和启动解码器。
我在解码器中做的一件事是:
List<NaluSegment> segments = NaluParser.parseNaluSegments(buffer);
for (NaluSegment segment : segments) {
// ignore unspecified NAL units.
if (segment.getType() != NaluType.UNSPECIFIED) {
// Hold the parameter set for stop/start initialization speed
if (segment.getType() == NaluType.PPS) {
lastParameterSet[0] = segment;
} else if (segment.getType() == NaluType.SPS) {
lastParameterSet[1] = segment;
} else if (segment.getType() == NaluType.CODED_SLICE_IDR) {
lastParameterSet[2] = segment;
}
// add to input queue
naluSegmentQueue.add(segment);
}
}
我保留最后的参数集和最后的关键帧,在开始时,我首先用这些填充naluSegmentQueue以减少视频呈现的延迟。
我正在解码从Android上的wifi摄像头接收到的原始h264。 这是解码时产生的视频的一个例子,除了底部部分看起来很好。 我还注意到一些奇怪的事情,当我移动摄像机时,饲料似乎运行几乎完全流畅(底部没有垃圾),一旦我把它放下,垃圾视频返回(我会以为它是相反的方式...) 我正在将h264数据解析成以澳元开头的块,每个块以澳元开头,当另一个开始时结束。 我的理解是,每个解析的“块”(以AUD开头)
我正在使用对三星S6上的h264流进行解码,发现mediacodec的输入缓冲区必须以“0001”开头(并且不需要设置pps、sps),否则ACodec将报告错误。 我也尝试使用mediaextractor播放一个mp4文件,它工作良好,但缓冲区到mediacodec不是以“0001”开始。 我不知道为什么decodec一个h264流有这样的限制,目前我需要从socket分析流,并将数据切割成小包
我从服务器接收到h264数据,我想在Android上使用mediacodec和texture view对该流进行解码。我从服务器获取数据,解析它得到SPS、PPS和视频帧数据,然后我将该数据传递给mediacodec,但函数dequeueOutputBuffer(info,100000)总是返回-1,并且我得到dequeueOutputBuffer超时。 请帮忙,我三周来一直在忙这个问题。 这是用
我目前正在尝试从RTP流解析H264数据,然后将其发送到MediaCodec以呈现在Android的SurfaceView上。 但是,我不确定如何: 根据RTP数据包正确构建H264切片 将H264切片组装成切片后发送到媒体编解码器
我正在尝试用android低级媒体API实时解码h264 nals。 每个nal都包含一个完整的帧,所以我希望在用我的nal提供输入并调用之后,它会“立即”(当然有一个litle延迟)显示我的帧,但它没有显示。我看到了第一个帧,出列器返回第一个缓冲区,只有在将第二个缓冲区馈送给解码器之后才返回第一个缓冲区,此时该缓冲区应该呈现第二个帧。帧编码时预置为x264,因此没有B帧等。 我想可能有一种方法可
我正在开发一个通过RTP接收H264编码数据的应用程序,但我无法让Android的MediaCodec输出任何内容。我正在按照https://stackoverflow.com/a/7668578/10788248对RTP数据包进行解包 在编码帧被重新组装后,我将它们输入到出列的输入缓冲区中。 当我对输入缓冲区进行排队时,我不会得到任何错误,但是解码器的回调从来不会调用onOutputBuffer