首页
学习
活动
专区
圈层
工具
发布

使用C#+FFmpeg+DirectX+dxva2硬件解码播放h264流

因为我们要自己编译ffmpeg,并且是改动代码后编译,ffmpeg我们编译时会裁剪。...原始流程中的,我的改动不影响原本任何功能)中适时调用;简单来说,原来的ffmpeg也能基于dxva2硬件解码,但是它没法将解码得到的surface用于前台播放,因为它创建device时并未指定窗口和其他相关参数...原始文件(版本不一致,仅供参考)   (ps:在这里我讲一下网络上另外一种写法(两年前我也用的他们的,因为没时间详细看ffmpeg源码),他们是在外面创建的device和surface然后想办法传到ffmpeg...检查变量正确性 编译ffmpeg ....--enable-shared --enable-small --disable-all --disable-autodetect --enable-avcodec --enable-decoder=h264

3.9K11
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    FFmpeg原始帧处理-滤镜API用法详解

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10429145.html 在FFmpeg中,滤镜(filter)处理的是未压缩的原始音视频数据...在多媒体处理中,术语滤镜(filter)指的是修改未编码的原始音视频数据帧的一种软件工具。滤镜分为音频滤镜和视频滤镜。FFmpeg提供了很多内置滤镜,可以用很多方式将这些滤镜组合使用。...;filterN-2;filterN-1;filterN 1.3.1 简单滤镜图 简单滤镜图(filtergraph)只能处理单路输入流和单路输出流,而且要求输入和输出具有相同的流类型。...比如,多路输入流和(或)多路输出流,或者输出流与输入流类型不同。...滤镜API应用实例分析 滤镜接收原始音视频帧,经过各种效果的滤镜处理后输出的仍然是原始音视频帧。

    4.9K70

    偶遇FFMpeg(四)-FFmpeg PC端推流

    开编 之前在Android集成FFmpeg。主要还是基于命令行的方式进行操作。刚刚好最近又在研究推流相关的东西。看了一些博文。和做了一些实践。 就希望通过本文记录袭来。 本文的大体结构如下 ?...FFMPEG 下载FFMPEG相关的文件和解压 从FFMPEG WINDOW BUILD中下载 dev和shared两个部分的内容 ?...他们之间有微小的差别:使用FFMPEG类库分离出多媒体文件中的H.264码流 因此在使用FFMPEG进行视音频处理的时候,常常可以将得到的AVPacket的data数据直接写成文件,从而得到视音频的码流文件...FFMPEG推流的套路 套路图如下: ? FFMPEG推流的套路.png 整个方法的流向: ? copy from leixiaohua.png 首先,我们先来熟悉一下这个整体的套路。其实推流的过程。...因为FFmpeg做好了封装,我们只要对其调用方法就可以了。 按照套路图,我们知道,使用FFmpeg的话 第一步是得到整体封装的输入和输出的上下文对象AVFormatContext 。

    2.7K30

    FFmpeg 使用教程

    可执行文件包括用于转码、推流、Dump媒体文件的ffmpeg、用于播放媒体文件的ffplay、 用于获取媒体文件信息的ffprobe,以及作为简单流媒体服务器的ffserver。...与音频的AAC编码格式相对应的是视频中的H264编码,它也有两种封装格式 一种是 MP4封装的格式 一种是裸的H264格式(一般称为annexb封装格式) FFmpeg中也提供了对应的`bit stream...filter,称H264_mp4toannexb`,可以将MP4封装格式的H264数据包转换为annexb封装格式的H264数据 (其实就是裸的H264的数据)包。...从MP4文件中抽取视频流导出为裸H264数据 ffmpeg -i output.mp4 -an -vcodec copy -bsf:v h264_mp4toannexb output.h264 使用AAC...,解码器将其解码为原始数据(裸数据),之后就可以将原始数据写入文件了。

    2K10

    微信 Android 视频编码爬过的那些坑

    调用的时候需要先初始化MediaCodec作为视频的编码器,然后只需要不停传入原始的YUV数据进入编码器就可以直接输出编码好的h264流,整个API设计模型来看,就是同时包含了输入端和输出端的两条队列:...因此,作为编码器,输入端队列存放的就是原始YUV数据,输出端队列输出的就是编码好的h264流,作为解码器则对应相反。...编码器支持特性相当有限 如果使用MediaCodec来编码H264视频流,对于H264格式来说,会有一些针对压缩率以及码率相关的视频质量设置,典型的诸如Profile(baseline, main, high...而在编码h264视频流的时候,由于h264的编码块大小一般是16x16,于是乎在一开始设置视频的宽高的时候,如果设置了一个没有对齐16的大小,例如960x540,在某些cpu上,最终编码出来的视频就会直接花屏...视频流之后,最终处理就是把音频流跟视频流合流然后包装到mp4文件,这部分我们可以通过系统的MediaMuxer, mp4v2, 或者ffmpeg来实现,这部分比较简单,在这里就不再阐述了 References

    10.7K55

    H264码流之AnnexB和AVCC

    、编码和切片等步骤都属于VCL,VCL最终会被包装为NAL NAL由一系列NAL Unit组成 不过接下来并不对NALU进行展开,而是关注另一个问题,即:在H264码流中是如何将NALU进行分割的 要搞清楚这点...,就需要了解目前H264主流的码流组织方式AnnexB和AVCC两种格式,其中Android的硬解码MediaCodec只支持AnnexB格式的数据,而Apple的VideoToolBox只支持AVCC...码流的时候,一旦遇到起始码,就认为一个新的 NALU 开始了 不过在NALU前加入起始码会引入一个新的问题,因为原始码流中是可能出现和起始码一样的数据,这样就会导致错误的NALU分割。...0x00 => 0x00 0x00 => 0x00 0x00 => 0x00 0x00 => 0x00 解码器在NALU内部检测到防竞争字节后将0x03丢弃来恢复原始数据...等封装中 它的原理是在NALU 前面添加固定字节(可能是1字节、2字节或4字节,其中4字节较常见),这几个字节组成一个整数(大端字节序)表示整个 NALU 的长度,在读取的时候,先把这个整数读出来(例如ffmpeg

    2.8K20
    领券