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

相关文章

通过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 实现视频播放功能,不仅仅是简单地嵌入视频,还要添加一些高级功能,如自定义播放器控件、播放进度条、视频切换、事件处理

【Hot100】LeetCode—394. 字符串解码

目录 1- 思路栈实现+四种情况处理 2- 实现⭐394. 字符串解码——题解思路 3- ACM 实现 原题链接:394. 字符串解码 1- 思路 栈实现+四种情况处理 ① 遇到数字,进行倍数相加 、②遇到左括号,压栈之前的元素、③遇到右括号弹出,栈进行拼接、④否则遇到字母,直接拼接在 res通过栈,实现先进后出的思想 对于输入 3[a2[c]] 的输入,在读到 3[得

浅析网页不安装插件播放RTSP/FLV视频的方法

早期很多摄像头视频流使用的是RTSP、RTMP协议,播放这类协议的视频通常是在网页上安装插件。但现在越来越多的用户,对于网页安装插件比较反感,且随着移动设备的普及,用户更多的希望使用手机、平板等移动设备,直接可以查看这些协议的视频。那是否有什么方案可以直接网页打开RTSP、RTMP协议的视频,直接观看不用安装插件呢?而且对于摄像头的数据,尽可能低延迟的获取实时画面。  其实很多摄像头厂家也注意到

使用WebRtcStreamer播放rtsp视频

一、使用步骤 1.安装WebRtcStreamer包 代码如下(示例): {"name": "default","version": "0.1.0","private": true,"scripts": {"serve": "vue-cli-service serve","build": "vue-cli-service build"},"dependencies": {"core-js":