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

相关文章

hevc和H.264格式的区别

HEVC(High Efficiency Video Coding)和H.264(也称为Advanced Video Coding,AVC)都是视频压缩标准,但它们之间存在一些显著的区别,主要集中在压缩效率、资源需求和兼容性方面。 压缩效率 HEVC,也被称为H.265,提供了比H.264更高的压缩效率。这意味着在相同的视频质量下,HEVC能够以大约一半的比特率进行编码,从而减少存储空间需求和

视频批量剪辑新境界:一键转码MP4至MP3并自动删除原文件,轻松优化存储空间与播放体验

随着数字媒体的飞速发展,视频文件已成为我们生活中不可或缺的一部分。然而,大量视频文件的累积不仅占据了宝贵的存储空间,而且在某些情况下,我们更希望提取视频中的音频内容。为了满足这一需求,我们推出了全新的视频批量剪辑方案,让你轻松实现MP4到MP3的转码,并自动删除原文件,优化存储空间,提升播放体验。 首先,让我们进入“视频剪辑高手”的主页面。简洁明了的界面设计,让您一眼就能找到所需的功能板

GUI布局:边界布局、流式布局、网格布局、卡片布局

边界布局 package guiTest;//JFrame默认的是边界布局BorderLayoutimport java.awt.BorderLayout;import javax.swing.JButton;import javax.swing.JFrame;public class BorderLayoutDemo {public static void main(String[

字符串到字节数组和字节数组到字符串的转换(编码和解码问题)

/*  * String(byte[] bytes, String charsetName):通过指定的字符集解码字节数组  * byte[] getBytes(String charsetName):使用指定的字符集合把字符串编码为字节数组  *  * 编码:把看得懂的变成看不懂的  * String -- byte[]  *  * 解码:把看不懂的变成看得懂的

【FreeRTOS】任务状态改进播放控制

这里写目录标题 1 任务状态1.1 阻塞状态(Blocked)1.2 暂停状态(Suspended)1.3 就绪状态(Ready)1.4 完整的状态转换图 2 举个例子3 编写代码 参考《FreeRTOS入门与工程实践(基于DshanMCU-103).pdf》 本节课实现音乐任务的创建,音乐播放的暂停与继续播放,删除任务。 代码为:08_task_priority

Google Vortex流式存储引擎分析

作者:archimekai,转载请注明出处 参考文献: Edara, P., Forbesj, J., & Li, B. (2024). Vortex: A Stream-oriented Storage Engine For Big Data Analytics. Companion of the 2024 International Conference on Management of Da

ios swift5 播放视频失败 本地的可以 网页链接播放失败

Main thread blocked by synchronous property query on not-yet-loaded property (PreferredTransform) for HTTP(S) asset. This could have been a problem if this asset were being read from a slow network.

ffmpeg+nginx+video实现rtsp流转hls流,web页面播放

项目场景: 最近调试海康摄像头需要将rtsp流在html页面播放,因为不想去折腾推拉流,所以我选择ffmpeg转hls流,nginx转发,html直接访问就好了 1.首先要下载nginx和ffmpeg 附上下载地址: nginx nginx news ffmpeg https://github.com/BtbN/FFmpeg-Builds/releases ffmpeg解压后 需配置环

【源码+硬件说明+接线】Arduino-ESP32 http访问播放网络mp3音乐并获取获取远程服务器文件并存SD卡

前言 最近跟浩楠哥接了一个外包,不得不说人总得逼自己一把就可以学到很多东西,这次收获不小,就把一部分困扰我一段时间的部分放出来给大家看看,避免大家踩我相同的坑 1. 硬件准备 1.1 Esp32Wroom 主控使用esp32Wroom,我具备蓝牙,wifi,低功耗蓝牙功能,配合Arduino库作为开发上手非常简单,只需了解部分知识即可上手。 1.2 MAX98357音频放大器模

Qt 解码unicode 16进制符号字符串

QString uDecodeSymbol(const QByteArray &resStr) { // 如何把16进制的unicode编码音标显示在窗口中? // 比如: \u07a0[\u045an\u02c8ta\u076at(\u0251)lm\u0249nt] // 解码思路如下: 先把16进制unicode编码转换为 10进制unicode编码