zoukankan      html  css  js  c++  java
  • 硬件解码

    记录做NVENC视音频同步遇到的问题:
    1:思路;使用ffmpeg进行拆包,分离音视频,然后音频就行解码后使用SDL播放,视屏使用cuda进行解码,


    首先,完成所有初始化工作
    创建解码器cuvidCreateDecoder(&oDecoder_, &oVideoDecodeCreateInfo_);
    创建解析器cuvidCreateVideoParser(&hParser_, &oVideoParserParameters);
    然后进行数据包的解析cuvidParseVideoData(pVideoSourceData->hVideoParser, pPacket);

    注意:进行数据包的解析的时候,需要对ffmpeg解析出来的包进行特殊处理,不然NVENC的回调接口不能正常回调
    (参考
    AVBitStreamFilterContext* bsfc = av_bitstream_filter_init("h264_mp4toannexb");

    av_bitstream_filter_filter(bsfc, pVideo->pVideoCodecCtx, NULL, &pVideo->pPacket->data, &pVideo->pPacket->size, pVideo->pPacket->data, pVideo->pPacket->size, 0);
      CUVIDSOURCEDATAPACKET pkt;
      pkt.flags = CUVID_PKT_TIMESTAMP;
      pkt.payload_size = pVideo->pPacket->size;
      pkt.payload = pVideo->pPacket->data;
      pkt.timestamp = pVideo->pPacket->pts;

      .....................

      cuvidParseVideoData(pVideoSourceData->hVideoParser, pPacket);

      .....................

      

    遇到的问题:

      ffmpeg解码后的Packet中是纯净的H264,其中却少ADTS头信息,然后解码器解码时需要该信息,所以需要使用 AVBitStreamFilterContext* bsfc = av_bitstream_filter_init("h264_mp4toannexb");对每个packet文件进行调整,如果解码HEVC编码格式的视屏,需要使用hevc_mp4toannexb,但是需要ffmpeg的版本支持cuda解码。

    作者:长风 Email:844064492@qq.com QQ群:607717453 Git:https://github.com/zhaohu19910409Dz 开源项目:https://github.com/OriginMEK/MEK 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 感谢您的阅读。如果觉得有用的就请各位大神高抬贵手“推荐一下”吧!你的精神支持是博主强大的写作动力。 如果觉得我的博客有意思,欢迎点击首页左上角的“+加关注”按钮关注我!
  • 相关阅读:
    mysql-python不支持python3
    解决:python安装mysqldb模块报 EnvironmentError: mysql_config not found
    自动ftp脚本,aix/linux 和 windows
    Poi设置列样式
    sails中创建和使用services
    test
    知识科普:IM聊天应用是如何将消息发送给对方的?(非技术篇)
    IM开发者的零基础通信技术入门(一):通信交换技术的百年发展史(上)
    鹅厂7年终有离开之日,记离职鹅厂最后30天的真实心路历程
    仿微信的IM聊天时间显示格式(含iOS/Android/Web实现)[图文+源码]
  • 原文地址:https://www.cnblogs.com/zhaohu/p/7029511.html
Copyright © 2011-2022 走看看