在C#项目中使用OpenH264 DLL
我正在通过UDP接收H264流.我想解码流,以便我可以将帧发送到OpenCV或其他.我在这里遇到了思科开源的H264解码器: 现在,我想弄清楚如何在C#项目中使用解码器DLL(welsdec.dll).上次我在Windows中使用C ++做任何严重的事情回到了DirectShow和Delphi 5天,所以我完全迷路了. H264项目中的任何内容都没有用__declSpec(dllexport)明确导出.那是正常的吗?将DLL作为项目参考添加到C#项目不起作用("参考是无效或不支持的"). 我猜DLL是不受管理的.我可以直接在C#中消费吗?我是否必须在C ++ CX库中重写DLL,或者或包装或包装它才能使此操作? 解决方案 您可以使用 pinvoke . 您还可以写 c ++/cli中的中间dll 以简化托管C#应用程序和本机DLL之间的调用.这是 secile/openh264lib.net /stackoverflow.com/users/43846/stu
18 2024-04-24
编程技术问答社区
如何在Windows 8 Metro C# XAML应用程序中播放H.264 RTSP视频?
我有一个从URL提供H.264视频流的设备,例如: rtsp://192.168.0.10:554/videoservice 由于这是实时视频,因此我不需要控制它(暂停,倒带等),只是播放.这是由 MedialElement 或其他标准类,我是否需要平滑流媒体比我想象的要复杂得多? 更新: 我下载了Microsoft的 player Framework ,但这也不播放流.我在有关RTSP的示例中找不到任何东西. 更新: 我用 wireshark 比较 vlc Media Player (有效)以Medialement和Player Framework发送,并且似乎都没有使用RTSP协议.相反,他们正在发送 wpad wpad wpad 即使我已经提供了一个不同的地址,即使我已经提供了IP地址来源.为什么需要这?有什么方法可以关闭这种行为? 解决方案 请参阅post 在这里.您需要将数据包裹在MPEG-4第14部分容器中,然后将它们传递到 MediaElement
14 2024-04-19
编程技术问答社区
C#中的H.264(或类似)编码器?
有人知道C#中的开源H.264编码器(或任何其他托管语言)吗?我也许也可以通过Python实施来完成. 我发现的库(例如X264)以相当低的C(带有大量宏)和组装编写.调整它们比我想象的要复杂得多.我的项目不关心性能或兼容性.我们只想测试某些想法将如何影响输出视频的感知. 如果需要,我们愿意为代码付款或许可. 预先感谢! 编辑 - 一些要点: 我根本不在乎性能(例如实时编码).我关心的所有内容可能需要10天的编码. 包装器没有帮助,因为我想实际修改编码器本身. 解决方案 没有人可能会花时间以这些语言来开发编解码器,因为它们对实际编码会毫无希望的速度.但是,参考实现应较少优化,对您更有用.它仍在c. 中 > 其他解决方案 我认为已经需要一个您需要的端口 - 您会找到任何Langugae的包装器,但是A Pure 实现没有临界质量.我建议自己移植它,记录您的端口,然后开始调整. 其他解决方案 如果要将一些编码器移植到C#,则应该更容
10 2024-04-18
编程技术问答社区
我如何在c#中从一组图像中创建一个H.264编码的电影?
我今天一直在寻找C#库,这将使我可以创建H.264编码的视频文件.有人知道是否存在任何此类库或第三方组件? 解决方案 使用 ffmpeg .我建议直接运行FFMPEG过程,例如在此样本中: http://jasonjano.wordpress.com/2010/02/09/a-simple-c-wrapper-for-formpeg/ 虽然样本不处理您需要的操作,但我建议将其适应您的需求. 其他解决方案
10 2024-04-15
编程技术问答社区
使用libavcodec解码H264视频,C
我试图用ffmpeg/libavcodec解码原始的H264文件,但无法使其正常工作.目前,输出应该是原始的YUV文件.可以用GCC 编译代码 gcc -o decoder decoder.c -L./lib/ -llibavcodec -llibavutil avcodec.dll,avutil.dll和swresample.dll必须放置在目录中,以启动.exe. CMD中的输出看起来像这样(仅此的一部分,但总是这样): [h264 @ 00a80f20] reference picture missing during reorder [h264 @ 00a80f20] Missing reference picture, default is 65562 [h264 @ 00a80f20] error while decoding MB 80 54, bytestream -10 [h264 @ 00a80f20] concealing 1649 DC, 1649
14 2024-04-09
编程技术问答社区
Windows。如何构建X264.lib而不是.dll
我下载了x264源并安装了mingw. 步骤1: 在mingw bash中执行此操作: ./configure -disable-cli- enable-shared -enable-win32thread- -extra-dlflags = -wl, - output-def = libx264.def ,然后'make' 步骤2: 将libx264-142.dll重命名为libx264.dll并打开VS2012命令提示符并执行以下操作: lib/def:libx264.def 给了我libx264.lib和对象libx264.exp 步骤3: 在使用X264 API的VS2012项目中包括了LIB文件. 问题: 启动项目时,我会收到以下错误消息: "该程序无法启动,因为libx264.dll从您的计算机中丢失" 问题: 当我链接静态库时,为什么要寻找dll? 如何解决这个问题?我想构建一个
14 2024-04-09
编程技术问答社区
当输入分辨率为1200x1600时,通过C-API解码的FFMPEG会导致人工制品.难道我做错了什么?
使用C-API和FFMPEG 5.1我已经能够在Android上使用Libx264编码H264视频. 现在,我想在我的C ++应用程序中的Linux上重播它们.这些视频可以在浏览器上正确播放,也可以在我尝试过的其他播放器上播放,例如Mplayer或FFMPEG的FFPlay.另外,我可以用ffmpeg -i recording.mp4 -start_number 0 -qscale:v 5 %06d.jpg展开帧,图像看起来还不错. 但是,在我时不时地在我的C ++应用程序中,但是以一种非常可重复的方式,我得到了伪像(例如显示器上方显示的明亮像素).即使它们与关键帧无关,它们也不会积累.因此,无论发生什么错误,它似乎都不会影响后续帧.我使用openCV可视化输出,而且我很确定问题不是bgr的转换,因为如果我只是显示y频道(亮度,灰度),则工件已经存在. 这些文物以1200x1600分辨率录制的视频中显示.要注意的是,1200不能被32排除,因此FFMPEG确实添加了一些填充物
38 2024-04-09
编程技术问答社区
如何使用FFmpeg C API对H.264视频进行编码,然后用媒体播放器打开输出?
我正在尝试使用FFMPEG C API编码H.264视频. 我已经成功编译并执行了由fffmpeg. 我面临的问题是.mpg文件(用AV_CODEC_ID_MPEG1VIDEO编码)示例创建的作​​品. Windows创建了缩略图和所有内容.另一方面,.h264(用AV_CODEC_ID_H264编码)文件没有.当我尝试在VLC中播放文件时,播放/暂停按钮只是闪烁,Windows中没有缩略图,没有任何内容. 在编码libx264期间报告以下内容: [libx264 @ 004b81a0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX [libx264 @ 004b81a0] profile High, level 1.3 [libx264 @ 004b81a0] frame I:3 Avg QP:26.79 size: 2116 [libx264 @ 004b81a0] frame P:12
14 2024-04-08
编程技术问答社区
H264解析-切片头检测
我知道,在H264中,我们可以通过位模式0x000001. 检测NAL单元 是否有一种等效方法可以检测NAL单元中的slice标头?一个人如何处理多块nal单元? 目前,我正在使用H264的解析代码,并在各自的结构中获取slice标头. 解决方案 在第36页(第7.3.3节)上讨论了 H.264标准. 可能值得看看参考软件.
14 2024-04-08
编程技术问答社区
FFmpeg H264解析
我正在使用ffmpeg来解码H.264视频,用于以下程序: #include #include #include #include #include #include #include #include #include void sigint_handler(int signal) { printf("\n"); exit(0); } const char *window_title; SDL_Surface *screen; SDL_Overlay *yuv_overlay; #define INBUF_SIZE 80000 /* * Video de
22 2024-04-07
编程技术问答社区
如何使用ffmpeg从H264 SPS获得宽度和高度
我正在尝试初始化ffmpeg H264编解码器上下文,以这样的SPS框架填充外推字段: #include #include int main() { const char sps[] = {0x00, 0x00, 0x00, 0x01, 0x67, 0x42, 0x00, 0x0a, 0xf8, 0x41, 0xa2}; av_register_all(); av_log_set_level(AV_LOG_DEBUG); AVCodec *const codec = avcodec_find_decoder(CODEC_ID_H264); if (codec != NULL) { AVCodecContext* ctx = avcodec_alloc_context3(codec
8 2024-04-07
编程技术问答社区
在AVI、MP4和 "Raw "h264流里面的h264。NAL单元的不同格式(或ffmpeg的错误)。
tl; dr:我想从avi/mp4文件中读取RAW H264流,甚至是损坏/不完整. 几乎每个有关H264的文档都告诉我它由NAL数据包组成.好的.几乎到处都告诉我,该数据包应该以00 00 01或00 00 00 01等签名开始.例如, stackoverflow.com/a/17625537/8167678"> https://stackoverflow.com/a/17625537/8167678 H.264的格式是它是由NAL单位组成的,每个单元都开始 具有三个字节的启动前缀,值0x00、0x00、0x01 每个单元的类型不同,具体取决于第四个的值 这3个启动字节后的字节.一个nal单位不是一个框架 在视频中,每个帧由许多NAL单元组成. 好的. 我下载了Random_youtube_video.mp4,然后从中剥离一个帧: ffmpeg -ss 10 -i random_youtube_video.mp4 -frames 1 -c copy pic
18 2024-04-07
编程技术问答社区
使用libavcodec的mpegts容器中的原始H264帧
我真的很感谢有关以下问题的帮助: 我有一个带相机的小工具,生产H264压缩视频帧,这些帧已发送到我的应用程序.这些帧不在容器中,只是原始数据. 我想使用ffmpeg和libav函数来创建一个视频文件,可以稍后使用. 如果我解码帧,然后对它们进行编码,一切正常,我会得到一个有效的视频文件. (解码/编码步骤是通常的libav命令,这里什么都没有,我从全能的互联网上拿走了它们,它们是坚实的)...但是,我浪费了很多时间来解码和编码,所以我想跳过此步骤,直接将帧放在输出流中.现在,问题来了. 这是我提出的代码生成编码: AVFrame* picture; avpicture_fill((AVPicture*) picture, (uint8_t*)frameData, codecContext->pix_fmt, codecContext->width, codecContext->heigh
10 2024-04-06
编程技术问答社区
如何使用x264 C API将一系列的图像编码成H264?
如何使用X264 C API将RBG图像编码为H264帧?我已经创建了一系列RBG图像,现在如何将该序列转换为H264帧序列?特别是,如何将此RGB图像序列编码为由单个初始H264密钥帧组成的H264帧序列,然后是依赖性H264帧? 解决方案 首先:检查x264.h文件,它或多或少包含每个功能和结构的参考.您可以在下载中找到的x264.c文件包含示例实现.大多数人说要以此为基础,但是我发现这对初学者来说很复杂,但这是一个很好的例子. 首先,您设置了一些类型x264_param_t的参数,一个描述参数的好站点是 http://mewiki.project357.com/wiki/wiki/wiki/x264_settings .还要查看x264_param_default_preset函数,该功能使您可以针对某些功能,而无需了解所有(有时很复杂的)参数.之后也使用x264_param_apply_profile(您可能需要"基线"配置文件) 这是我代码的一些示例设置:
20 2024-04-05
编程技术问答社区
我怎样才能播放H264视频?
我从相机(从安全摄像机)那里收到了以下视频文件 http://dl.dropbox.com/u/1369478/tmw/recording.264 如何查看内容?基于扩展名,我认为这是H264文件.有没有办法在使用HTML5的浏览器上播放此操作? 问候 解决方案 hmm ..从外观上看起来不像H264文件.. 通过MediaInfo运行它,我得到了: 视频 格式:AVC 格式/信息:高级视频编解码器 格式资料:baseline@l2.0 格式设置,cabac:no 格式设置,重组:1帧 宽度:352像素 身高:288像素 显示纵横比:1.222 分辨率:24位 比色:4:2:0 扫描类型:Progressive 除此之外,您还必须知道,并非所有浏览器都支持 element中的H264 ..其中一些决定保留OGG,所以到处都不会真正可用:S 这是一张表显示H264视频操作系统仅由Chrome和Safari支持: 无论如
22 2024-04-03
编程技术问答社区
如何使用MediaCodec将位图编码成视频?
我想将一组我的位图编码为H264.这可以通过MediaCoder吗?我已经编写了一些代码来做到这一点,但是在我尝试过的任何媒体播放器中都无法播放输出.这是我主要是从我在Stackoverflow上发现的其他来源借来的一些代码. mMediaCodec = MediaCodec.createEncoderByType("video/avc"); mMediaFormat = MediaFormat.createVideoFormat("video/avc", 320, 240); mMediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 125000); mMediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15); mMediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.CO
16 2024-03-31
编程技术问答社区
如何在H264 SDP中解码sprop-参数集?
对于H264流中,sprop-parameter-set中的基本64字节的含义是什么?我怎么能从这个示例中知道视频大小? SDP示例: sprop-parameter-sets=Z0IAKeNQFAe2AtwEBAaQeJEV,aM48gA== 第一部分从base64到base16: 67 42 00 29 E3 50 14 07 B6 02 DC 04 04 06 90 78 91 15 第二部分(分离逗号): 68 CE 3C 80 答案: 取得H264Video流的尺寸 解决方案 您需要的规格可免费从ITU网站免费下载: - h.264(03/10) 选择可自由下载的PDF,您会找到7.3.2.1.1中详细介绍的格式. 对不起,我以前的答案没有被束缚,只是不知道该信息在公共领域可用. 其他解决方案 当然,规格始终是最好的,但是SDP中的Sprop参数集通常由您的序列参数和图片参数集组成,这些参数集,基本-64由逗号编码
16 2024-03-27
编程技术问答社区
iPhone中H 264流的SPS值
有人可以指向我的文档,这将帮助我获得iPhone的正确SP和PPS值. 解决方案 问题有点不清楚... Picture Parameter Set在最新的 itu-t版本中第7.3.2.2章 的标准 Sequence Parameter Set在第7.3.2.1章中描述了 其他解决方案 我敢肯定,您知道,但是您只能将H264编码的视频保存到iOS上的文件(.mp4,.mov)中.尚无代码可以访问编码的视频帧.因此,如果要创建编码视频的MP4文件,则需要使用AvassetWriter. Apple有一个很好的示例代码这. 我不知道有任何不同的SP/PP出版的地方;由于它们会根据您的压缩设置,图像大小以及您是否在肖像或景观模式中编码视频而有所不同.您可以使用上面的示例代码(RosyWriter)使用您的编码预设生成一些小的.mp4文件;然后,我将使用十六进制编辑器手动找到SPS/PPS.请注意,作为较大的MP4信息结构的一部分,SPS/PPS将在文件末尾朝向文
16 2024-03-21
编程技术问答社区
如何使用AVAssetWriter将h264纹理写入视频?
我想将H.264流从服务器到视频文件,但是当我使用assetwrite.finishwrite时,Xcode Reports Video /var/mobile/Applications/DE4196F1-BB77-4B7D-8C20-7A5D6223C64D/Documents/test.mov cannot be saved to the saved photos album: Error Domain=NSOSStatusErrorDomain Code=-12847 "This movie format is not supported." UserInfo=0x5334830 {NSLocalizedDescription=This movie format is not supported.}" 以下是我的代码: 数据是H.264框架,只有一个帧,它可能是i框架或p. (void)_encodeVideoFrame2:(NSData *) data time:
22 2024-03-21
编程技术问答社区
从iOS AVAssetWriter生成的原始H264 mdat中获取PTS
我正在尝试同时读写H.264 MOV文件由AvassetWriter编写.我设法提取了单个NAL单元,将其包装到FFMPEG的Avpackets中,然后使用FFMPEG将其写入另一种视频格式.它有效,除了播放速度不正确之外,结果文件效果很好.如何从RAW H.264数据中计算正确的PTS/DTS值?也许还有其他方法来获取它们? 这是我尝试的: 将捕获最小帧速率限制为30,并假定输出文件为30 fps.实际上,它的fps始终小于我设置的值.而且,我认为FPS从数据包到数据包都不是恒定的. 请记住每个书面样本的演示时间戳,并假设样本映射到纳卢斯一对一,并将保存的时间戳应用于输出数据包.这行不通. 将PTS设置为0或AV_NOPTS_VALUE.行不通. 从谷歌搜索中,我了解RAW H.264数据通常不包含任何计时信息.有时它可以在SEI内有一些计时信息,但是我使用的文件没有.另一方面,有些应用程序正是我要做的,所以我想可能以某种方式可能. 解决方案 您要
8 2024-03-21
编程技术问答社区