我想在视频直播时也获取视频流数据并处理,看到onVideoData回调:
onVideoData:采集过程中实时进行视频数据回调。
void onVideoData(long dataFrameY, long dataFrameU, long dataFrameV, AliLiveConstants.AliLiveImageFormat format, int width, int height, int strideY, int strideU, int strideV, int rotate)
这个回调中,YUV三个分量是long类型的? 我如何能获取对应的YUV的原数据?
pFormatCtx = avformat_alloc_context();
pFormatCtx->interrupt_callback.callback = interrupt_cb;--------注册回调函数
pFormatCtx->interrupt_callback.opaque = pFormatCtx;
AVDictionary* options = NULL;
av_dict_set(&options, "rtsp_transport", "udp", 0);
// ret = avformat_open_input(&pFormatCtx, cFullPath, 0, &options);
//avformat_network_init();
// Open video file
if(avformat_open_input(&pFormatCtx, [url cStringUsingEncoding:NSASCIIStringEncoding], 0, &options) != 0) {
av_log(NULL, AV_LOG_ERROR, "Couldn't open file\n");
goto initError;
}
static int interrupt_cb(void *ctx) { // do something NSLog(@"%d",time_out); time_out++; if (time_out > 40) { NSLog(@"------%d", firsttimeplay); time_out=0; if (firsttimeplay) { firsttimeplay=0; NSLog(@"++++++++"); return 1;//这个就是超时的返回 } } return 0; }
》ffmpeg api调用注意: av_init_packet(avpacket) 参考头文件说明,它只能初始化结构体的option member,不能对 data ,size成员进行初始化。故需要手动初始化,建议空包需要所有初始化的地方替换如下,否则容易导致后续各种因为size不对的问题的隐含错误。 memset(&pkt, 0 ,siezof(avpacket)); av_init_packet( &pkt );
》ffmpeg avformat_seek_file底层调用的是av_seek_frame(x,x,x,flags);其中flags有1,2,4,8三种方式,其中8 AVSEEK_FLAG_FRAME基于关键帧进行跳转,发现精度是最高的。
》ffmpeg avformat_seek_file底层调用的是av_seek_frame(x,x,x,flags);其中flags有1,2,4,8三种方式,其中8 AVSEEK_FLAG_FRAME基于关键帧进行跳转,发现精度是最高的。
载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/u013316124/article/details/51793884
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。