gpt4 book ai didi

video - omxplayer AVPacket

转载 作者:行者123 更新时间:2023-12-04 23:30:34 36 4
gpt4 key购买 nike

嗨,我正在尝试使用 OpenMax 组件和来自 GitHub 的 hello_video 示例解码视频.
我只需编辑 video.c 并替换 AVFormat 上的“main frame while” -read frame packet for read not only *.h264 files 。 (我需要阅读 mp4、mov、mkv ......)..
因此,使用我使用 ffmpeg 生成的 test.h264 文件和其他文件,一切正常,并且在屏幕上我可以看到电影。

ffmpeg -i file.mp4 -vcodec copy -vbsf h264_mp4toannexb out.h264

但是,如果我打开 test.mp4 文件,我在屏幕上看不到图片,并且登录控制台显示数据正确读取并正确解析到视频解码器的输入缓冲区。
谁能解释一下为什么我在第二次测试中看不到屏幕上的任何东西?
    do{
printf("###before DO!\n");
status=av_read_frame(pFormatCtx,&packet);
//only for video
if(packet.stream_index==*video_stream_index){
printf("=>Read frame, status: %d, index: %d, stream index: %d, packet duration: %d, size: %d\n",pstatus,index++,packet.stream_index,packet.duration,packet.size);
int psize=packet.size;
int preaded=0;
double pts=packet.duration;
while(psize!=0){
buf = ilclient_get_input_buffer(video_decode, 130, 1);
buf->nFlags = 0;
buf->nOffset = 0;
uint64_t val = (uint64_t)(pts == DVD_NOPTS_VALUE) ? 0 : pts;
if(first_frame==true){buf->nFlags = OMX_BUFFERFLAG_STARTTIME;first_frame=false;}else{buf->nFlags = OMX_BUFFERFLAG_TIME_UNKNOWN;}
buf->nTimeStamp = ToOMXTime(val);
buf->nFilledLen = (psize > buf->nAllocLen) ? buf->nAllocLen : psize;
memcpy(buf->pBuffer, packet.data+preaded,buf->nFilledLen);
psize-=buf->nFilledLen;
preaded+=buf->nFilledLen;
if(psize == 0){buf->nFlags|=OMX_BUFFERFLAG_ENDOFFRAME;printf("#######################################OMX_BUFFERFLAG_ENDOFFRAME\n");}
printf("=>BUFF size: %d\n",buf->nFilledLen);
OMX_ERRORTYPE r;
if(pstatus==0){if(r=OMX_EmptyThisBuffer(ILC_GET_HANDLE(video_decode), buf) != OMX_ErrorNone){status = -6;printf("Failed, OMX_EmptyThisBuffer, error: 0x%08x , buf allocate: %d, buf lenght: %d \n", r,buf->nAllocLen,buf->nFilledLen);break;}}
}//while psize
av_free_packet(&packet);
}//if index
}//do
while(pstatus==0);

最佳答案

登录控制台显示数据正确读取并正确解析到视频解码器的输入缓冲区

你是什​​么意思?最有可能的是,从 mp4 解复用的数据包不是 OMX 解码器所期望的附件 b 形式,这是 .h264 文件(流)格式的自然形式。所以,在你读完一个 NALU 之后,用 00000001 (四个字节,最后一位打开)替换标题,你可能会很幸运。

其他需要考虑的事情:解码器可能会或可能不会期望第一个 I 帧的 SPS/PPS,等等......

更新: LLVM 测试套件有一个 C source file正是这样做的。您可能还对引用 AVC/h264 implementation 感兴趣进行相反的转换 - 从附件 B 到 NALU。

关于video - omxplayer AVPacket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14715483/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com