我正在尝试使用h264
和ffmpeg
库解码stagefright
视频。我正在使用this示例。
该示例显示了如何解码mp4
个文件,但我只想解码h264
个视频。
这是我的代码..
AVFormatSource::AVFormatSource(const char *videoPath)
{
av_register_all();
mDataSource = avformat_alloc_context();
avformat_open_input(&mDataSource, videoPath, NULL, NULL);
for (int i = 0; i < mDataSource->nb_streams; i++)
{
if (mDataSource->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
{
mVideoIndex = i;
break;
}
}
mVideoTrack = mDataSource->streams[mVideoIndex]->codec;
size_t bufferSize = (mVideoTrack->width * mVideoTrack->height * 3) / 2;
mGroup.add_buffer(new MediaBuffer(bufferSize));
mFormat = new MetaData;
switch (mVideoTrack->codec_id == CODEC_ID_H264)
{
mConverter = av_bitstream_filter_init("h264_mp4toannexb");
mFormat->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_AVC);
if (mVideoTrack->extradata[0] == 1) //SIGSEGV Here
{
mFormat->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_AVC);
mFormat->setData(kKeyAVCC, kTypeAVCC, mVideoTrack->extradata,
mVideoTrack->extradata_size);
}
}
mFormat->setInt32(kKeyWidth, mVideoTrack->width);
mFormat->setInt32(kKeyHeight, mVideoTrack->height);
}
mVideoTrack->extradata
为NULL。我做错了什么?我的问题是,mVideoTrack->extradata
对于 kKeyAVCC 应该是什么?
请帮助我,我需要你的帮助。 提前致谢。
答案 0 :(得分:2)
如果您的输入是原始h.264文件,则它已经是附件B格式。所以你不需要进行“h264_mp4toannexb”转换。此外,在附件B中,SPS / PPS与第一个(或每个)IDR帧一起发送。因此不需要额外的数据。在此处阅读更多内容:Possible Locations for Sequence/Picture Parameter Set(s) for H.264 Stream