H.264流式解码播放库

2024-05-15 07:38
文章标签 解码 播放 h.264 流式

本文主要是介绍H.264流式解码播放库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用ffmpeg组装的H.264流式解码播放库,主要用于视频监控客户端的解码显示。主要特性有:
  • 支持解码回调
  • 支持显示回调,可实现OSD叠加等
  • 支持多种文件格式,如:mp4,ts,h264,flv,mkv等
  • 支持多倍速[1/8,8]

详细见: http://100wisdom.net/product/H264Player.html
接口如下:

/** * 初始化解码库 * @return TRUE 如果成功 */ DLLEXPORT BOOL WINAPI H264_Init();/** * 清理解码库 */ DLLEXPORT void WINAPI H264_Uninit();/** * 获取库的版本 * @return 版本字符串 */ DLLEXPORT LPCSTR WINAPI H264_GetVersion();/** * 获取操作的错误码, 与windows错误码意义一致 * @return 0 表示没有错误 */ DLLEXPORT long WINAPI H264_GetLastError();/** * 创建流式解码器 * @return 解码器句柄, NULL表示失败, 需要调用H264_DestroyPlayer进行关闭 */ DLLEXPORT HANDLE WINAPI H264_CreatePlayer();/** * 销毁解码器 * @param handle 解码器句柄 */ DLLEXPORT void WINAPI H264_DestroyPlayer(HANDLE handle);/** * 设置显示窗口 * @param handle 解码器句柄 * @param hwnd 窗口句柄 * @return TRUE 表示成功 */ DLLEXPORT BOOL WINAPI H264_SetVideoWnd(HANDLE handle, HWND hwnd);/** * 输入视频数据 * @param handle 解码器句柄 * @param buffer 数据缓冲区 * @param length 数据长度 * @return TRUE 表示解码成功 */ DLLEXPORT BOOL WINAPI H264_InputData(HANDLE handle, const BYTE* buffer, DWORD length);/** * 获取视频分辨率,调用H264_InputData解码成功之后才会返回有效值 * @param pWidth 宽 * @param pHeight 高 * @return TRUE 表示成功 */ DLLEXPORT BOOL WINAPI H264_GetPictureSize(HANDLE handle, int* pWidth, int* pHeight);/** * 抓图,格式为BMP * @param handle 解码器句柄 * @param filename 文件名 * @return TRUE 表示成功 */ DLLEXPORT BOOL WINAPI H264_Snap(HANDLE handle, LPCSTR filename);/** * 刷新窗口 * @param handle 解码器句柄 */ DLLEXPORT void WINAPI H264_Refresh(HANDLE handle);/** * 播放 * @param handle * @return TRUE 表示成功 */ DLLEXPORT BOOL WINAPI H264_Play(HANDLE handle);/** * 暂停 * @param handle * @param pauseIt TRUE 表示暂停,FALSE表示恢复 * @param TRUE 表示成功 */ DLLEXPORT BOOL WINAPI H264_Pause(HANDLE handle, BOOL pauseIt);/** * 停止 * @param handle 解码器句柄 * @return TRUE 表示成功 */ DLLEXPORT BOOL WINAPI H264_Stop(HANDLE handle);/** * 解码回调 * @param handle 解码器句柄 * @param pBuf 视频数据指针 * @param size 视频数据长度 * @param width 宽 * @param height 高 * @param fmt 视频帧格式 * @param pUser 设置回调时传入的环境指针 */ typedef void (* H264DecodeCallback)(HANDLE handle, unsigned char* pBuf, int size, int width, int height, int fmt, void* pUser);/** * 显示回调 * @param handle 解码器句柄 * @param hdc 绘图设备环境句柄 * @param pUser 设置回调时环境指针 * */ typedef void (* H264DrawCallback)(HANDLE handle, HDC hdc, void* pUser);/** * 设置解码回调 * @param handle 解码句柄 * @param cb 回调函数 * @param pUser 环境指针 * */ DLLEXPORT void WINAPI H264_SetDecodeCallback(HANDLE handle, H264DecodeCallback cb, void* pUser);/** * 设置显示回调,可在回调中进行绘图操作 * @param handle 解码器句柄 * @param cb 回调函数 * @param pUser 环境指针 */ DLLEXPORT void WINAPI H264_SetDrawCallback(HANDLE handle, H264DrawCallback cb, void* pUser);/** * 打开文件,支持.h264,.ts,.mp4,.avi格式 * @param filename 文件名 * @return 解码器句柄, 需要调用H264_CloseFile关闭 */ DLLEXPORT HANDLE WINAPI H264_OpenFile(LPCSTR filename);/** * 关闭文件解码器 * @param handle 解码器句柄 */ DLLEXPORT void WINAPI H264_CloseFile(HANDLE handle);/** * 获取播放进度 * @param handle * @return 播放进度,范围为[0, 1] */ DLLEXPORT double WINAPI H264_GetPos(HANDLE handle);/** * 设置播放文件,即定位操作seek * @param handle 解码器句柄 * @param pos 进度值,范围为[0, 1] * @return TRUE 表示成功 */ DLLEXPORT BOOL WINAPI H264_SetPos(HANDLE handle, double pos);/** * 获取文件的总时长, * @param handle 解码器句柄 * @param pSeconds 总时长,单位为秒,有些文件无法获取时长,比如.h264格式的文件 * @return TRUE 表示成功 */ DLLEXPORT BOOL WINAPI H264_GetDuration(HANDLE handle, double* pSeconds);/** * 设置播放速度,该操作对实时解码无效 * @param handle 解码器句柄 * @param scale 播放速度,范围为[1/8, 8], 1表示正常速度,8 表示快八倍速,1/8表示慢八倍速 * @return TRUE 表示成功 */ DLLEXPORT BOOL WINAPI H264_SetScale(HANDLE handle, double scale);/** * 设置文件播放结束通知消息,消息的wparam表示句柄,lparam保留 * @param handle 解码器句柄 * @param hwnd 消息窗口句柄 * @param msg 消息类型 * @return TRUE 表示成功 */ DLLEXPORT BOOL WINAPI H264_SetFileEndMsg(HANDLE handle, HWND hwnd, UINT msg);

这篇关于H.264流式解码播放库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/991209

相关文章

Spring AI集成DeepSeek实现流式输出的操作方法

《SpringAI集成DeepSeek实现流式输出的操作方法》本文介绍了如何在SpringBoot中使用Sse(Server-SentEvents)技术实现流式输出,后端使用SpringMVC中的S... 目录一、后端代码二、前端代码三、运行项目小天有话说题外话参考资料前面一篇文章我们实现了《Spring

Java 8 Stream filter流式过滤器详解

《Java8Streamfilter流式过滤器详解》本文介绍了Java8的StreamAPI中的filter方法,展示了如何使用lambda表达式根据条件过滤流式数据,通过实际代码示例,展示了f... 目录引言 一.Java 8 Stream 的过滤器(filter)二.Java 8 的 filter、fi

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开

通过C#和RTSPClient实现简易音视频解码功能

《通过C#和RTSPClient实现简易音视频解码功能》在多媒体应用中,实时传输协议(RTSP)用于流媒体服务,特别是音视频监控系统,通过C#和RTSPClient库,可以轻松实现简易的音视... 目录前言正文关键特性解决方案实现步骤示例代码总结最后前言在多媒体应用中,实时传输协议(RTSP)用于流媒体服

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬

FFmpeg系列-视频解码后保存帧图片为ppm

在正常开发中遇到花屏时怎么处理呢?可以把解码后的数据直接保存成帧图片保存起来,然后直接看图片有没有花屏来排除是否是显示的问题,如果花屏,则代表显示无问题,如果图片中没有花屏,则可以往显示的方向去排查了。 void saveFrame(AVFrame* pFrame, int width, int height, int iFrame){FILE *pFile;char szFilename[

UniApp实现漂亮的音乐歌词滚动播放效果

在现代的音乐播放应用中,歌词的展示和滚动播放已经成为了一个非常常见的功能。今天,我们将通过UniApp来实现一个漂亮的歌词滚动播放功能。我们将使用UniApp提供的组件和API来完成这个任务。 页面结构 在页面的模板部分,我们需要创建一个音频播放器和歌词展示区域。使用<scroll-view>组件来实现歌词的滚动效果。 <template><view class="audio-co

Vue 中实现视频播放的艺术

随着前端技术的飞速发展,视频播放在 Web 应用中已经成为了一个不可或缺的功能。从社交媒体平台到教育网站,再到在线购物平台,视频元素无处不在。而 Vue.js 作为当今最流行的前端框架之一,在实现视频播放时提供了很多强大的工具和技巧。在这篇博客中,我们将深入探讨如何使用 Vue.js 实现视频播放功能,不仅仅是简单地嵌入视频,还要添加一些高级功能,如自定义播放器控件、播放进度条、视频切换、事件处理