使用vlc sdk播放rtsp视频流

Vc6.0环境下:

    1 工具—》选项—》目录—》include files:指定vlc安装目录;用于#include <include\vlc\vlc.h>

                                                --》library files:指定vlc安装目录;用于#pragma comment(lib, "libvlc.lib")

    2 包含头文件会报错,需要在文件头加上:#define WIN32_LEAN_AND_MEAN

    3 在工程目录debug下放入一下文件,在vlc安装目录下拷贝过来;

   4 到此,配置完成。开始播放停止源代码;

 

Vs2010环境下:

1 在所建立工程 –》属性 –》VC++目录 包含目录和库目录下分别指定vlc安装目录下的头文件和库文件路径;

  2 关于数据类型会报错。需要在文件中加入:

#define int64_t long
#define uint32_t int

 3在工程目录debug或者release下放入文件,在vlc安装目录下拷贝过来;

plugins文件夹

libvlc.dll

libvlc.lib

libvlccore.dll

libvlccore.lib

4 到此,配置完成。开始播放停止源代码;


引用:http://blog.sina.com.cn/s/blog_62a8419a01014eey.html  《阿东的程序人生》


源代码:

#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <tchar.h>
#include <time.h>
#include <windows.h>


#include <include\vlc\vlc.h>
#pragma comment(lib, "libvlc.lib")
#pragma comment(lib, "libvlccore.lib")


libvlc_media_player_t * vlc_player = NULL;
libvlc_instance_t *     vlc_ins    = NULL;
libvlc_media_t *        vlc_media  = NULL;


//打开视频流
int fun()
{
//RTSP 地址
char play_address[]="rtsp://218.204.223.237:554/live/1/0547424F573B085C/gsfp90ef4k0a6iap.sdp";
FreeConsole();
const char * vlc_args[] = 
{
"-I",
"dummy",
"--ignore-config",
// "--extraintf=logger",//dos打印信息 关掉
"--verbose=2", 
}; 


// 创建一个VLC实例
vlc_ins = libvlc_new(sizeof(vlc_args)/sizeof(vlc_args[0]), vlc_args);
if(vlc_ins != NULL)
{
// 创建一个VLC播放器
vlc_player = libvlc_media_player_new(vlc_ins);
if(vlc_player != NULL)
{
// 通过文件路径创建一个媒体实例,这里是我的测试文件
vlc_media = libvlc_media_new_path(vlc_ins, play_address);
if(vlc_media != NULL)
{
// 解析媒体实例
libvlc_media_parse(vlc_media);
// 获取媒体文件的播放长度,  返回 ms
libvlc_time_t duration = libvlc_media_get_duration(vlc_media);


// 此处是获取媒体包含多个的视频和音频轨以及其他类型的轨道信息
libvlc_media_track_info_t *media_tracks = NULL;
int trackCount = libvlc_media_get_tracks_info(vlc_media, &media_tracks);


// 把打开的媒体文件设置给播放器
libvlc_media_player_set_media(vlc_player, vlc_media);


// 因为是windows系统,所以需要设置一个HWND给播放器作为窗口,这里就直接使用桌面窗口,这里仅是测试
libvlc_media_player_set_hwnd(vlc_player,  ::GetDesktopWindow());//::GetDesktopWindow()使用具体窗口代替
// 开始播放视频
libvlc_media_player_play(vlc_player);
}
}
}
return 0;
}


//关闭视频流
int funclose()
{
libvlc_media_player_stop(vlc_player);
libvlc_media_release(vlc_media);
libvlc_media_player_release(vlc_player);
libvlc_release(vlc_ins);
return 0;


int main(int argc, char* argv[])
{
fun();
Sleep(10000);
funclose();
}


 

### 如何在 UniApp 中集成 VLC 播放 RTSP 视频流 #### 方法概述 为了实现在 UniApp 中播放 RTSP 流媒体,通常需要借助第三方插件或 SDK 来桥接原生功能。由于 UniApp 是一个多端框架,支持编译到多个平台(iOS、Android),因此对于不同操作系统需采取不同的策略。 针对 Android 平台,可以通过引入 VLC 的 Java 绑定库 `libVLC` 实现对 RTSP 协议的支持[^3];而对于 iOS,则可能涉及更复杂的配置过程,因为官方并没有提供直接适用于 Web 或跨平台应用的解决方案。考虑到兼容性和开发效率,在实际操作中推荐利用 WebView 容器加载 H5 页面并嵌入基于 JavaScript API 控制的 VLC 插件作为替代方案之一[^2]。 #### 集成步骤 ##### 1. 准备工作 - **安装依赖**:确保已安装最新版本的 Node.js 和 npm。 - **初始化项目**:通过命令行工具创建一个新的 UniApp 工程结构。 ```bash vue create my-uniview-app cd my-uniview-app npm install @uni/vlc-player --save ``` 请注意上述假定了存在名为 `@uni/vlc-player` 的虚拟包名用于说明目的,实际上该名称不存在于 NPM 上,开发者应寻找合适的适配 uniapp 的 vlc player 库或者自行封装。 ##### 2. 修改 manifest.json 文件 编辑项目的根目录下的 `manifest.json` 文件,添加必要的权限声明以及自定义组件注册: ```json { "name": "my-vlc-streamer", ... "permissions":[], "components":{ "vlcPlayer":"path/to/custom/component" } } ``` 这里同样假设了一个路径 `"path/to/custom/component"` 表示自定义组件的位置,具体取决于所使用VLC Player 封装形式及其文档指导。 ##### 3. 创建 VLC Player 自定义组件 根据目标平台特性编写相应的逻辑处理代码片段如下所示: ###### 对于 Android 设备 (使用 libVLC) ```javascript // components/VlcPlayer.vue <template> <div id="video-container"></div> </template> <script lang="ts"> import { defineComponent } from 'vue'; declare const window: any; export default defineComponent({ data() { return { mediaUrl: '' }; }, mounted(){ this.initPlayer(); }, methods:{ async initPlayer(){ const LibVLC = await import('org.videolan.libvlc/LibVLC'); let options = [ '--aout=opensles', '-vvv' ]; let libInstance = new LibVLC(options); window.player = new org.videolan.libvlc.MediaPlayer(libInstance); document.getElementById('video-container').appendChild(window.player.element); if(this.mediaUrl){ await this.playMedia(this.mediaUrl); } }, playMedia(url:string){ let media = new org.videolan.libvlc.Media(this.window.player.getLib(), url, false); this.window.player.setMedia(media); this.window.player.play(); } } }); </script> ``` 这段 TypeScript 代码展示了如何在一个 Vue SFC (单文件组件)内部实例化一个 VLC 媒体播放器对象,并将其附加至 DOM 节点上以便渲染视频内容。需要注意的是这里的导入语句 (`import`) 可能会因环境差异而有所不同,特别是当涉及到 NativeScript 或 Capacitor 这样的桥梁技术时。 ###### 对于其他设备 (Web/Hybrid App 使用 HTML5 Video + VLC Plugin) ```html <!-- pages/index/index.vue --> <template> <section class="content"> <h1>RTSP Stream Viewer</h1> <object type="application/x-vlc-plugin" :data="streamURL" width="80%" height="60%"> param name="AutoPlay" value="true"/> param name="ShowDisplay" value="true"/> </object> </section> </template> <script setup> import { ref } from 'vue'; const streamURL = ref('rtsp://your_rtsp_stream_address_here'); </script> ``` 此方法适合那些能够运行带有 VLC 插件支持的浏览器环境中,比如某些特定品牌的桌面级软件或是经过特殊定制的企业内网客户端。 #### 示例代码总结 以上提供了两种基本模式来满足不同类型的需求——一种是面向移动终端用户的高性能本地解码方式;另一种则是侧重于广泛适用性的轻量级远程访问途径。选择哪种实现取决于应用场景的具体情况和个人偏好。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值