开发者社区> 问答> 正文

关于 视频直播 推流 android SDK中 onVideoData回调参数问题

我想在视频直播时也获取视频流数据并处理,看到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的原数据?

onVideoData API文档地址

展开
收起
广土枼一 2021-02-18 20:20:10 1209 0
1 条回答
写回答
取消 提交回答
  • 下一站是幸福

    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

    2021-04-02 22:04:14
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载