• 用vlc SDK创建一个播放视频文件和RTSP流视频的Demo


     1 #include <stdio.h>
     2 #include <tchar.h>
     3 #include <time.h>
     4 #include <windows.h>
     5 
     6 #include <vlc/vlc.h>
     7 #pragma comment(lib, "libvlc.lib")
     8 #pragma comment(lib, "libvlccore.lib")
     9 
    10 int main(int argc, char* argv[])
    11 {
    12     libvlc_instance_t *     vlc_ins = NULL;
    13     libvlc_media_player_t * vlc_player = NULL;
    14     libvlc_media_t *        vlc_media = NULL;
    15 
    16     //创建一个vlc实例
    17     vlc_ins = libvlc_new(0,NULL);
    18 
    19     if (vlc_ins != NULL)
    20     {
    21         //从实例上创建一个VLC播放器供视频播放
    22         vlc_player = libvlc_media_player_new(vlc_ins);
    23 
    24         if (vlc_player != NULL)
    25         {
    26             //打开一个RTSP流地址,通过地址创建一个媒体实例
    27             vlc_media = libvlc_media_new_location(vlc_ins, "rtsp://218.204.223.237:554/live/1/0547424F573B085C/gsfp90ef4k0a6iap.sdp");
    28             
    29             
    30             //打开一个视频文件,通过文件创建一个媒体实例
    31             //vlc_media = libvlc_media_new_path(vlc_ins, "D:\Youku Files\transcode\test.avi");
    32 
    33             if (vlc_media != NULL)
    34             {
    35                 // 解析媒体实例
    36                 libvlc_media_parse(vlc_media);
    37                 // 获取媒体文件的播放长度,  返回 ms
    38                 libvlc_time_t duration = libvlc_media_get_duration(vlc_media);
    39 
    40                 // 此处是获取媒体包含多个的视频和音频轨以及其他类型的轨道信息
    41                 libvlc_media_track_info_t *media_tracks = NULL;
    42                 int trackCount = libvlc_media_get_tracks_info(vlc_media, &media_tracks);
    43                 // 这里是释放内存,但我测试的时候会有问题,还没仔细研究是为何
    44                 // free(media_tracks);  // crash?
    45 
    46                 // 把打开的媒体文件设置给播放器
    47                 libvlc_media_player_set_media(vlc_player, vlc_media);
    48 
    49                 // 因为是windows系统,所以需要设置一个HWND给播放器作为窗口,这里就直接使用桌面窗口,这里仅是测试
    50                 libvlc_media_player_set_hwnd(vlc_player, ::GetDesktopWindow());
    51                 // 开始播放视频
    52                 libvlc_media_player_play(vlc_player);
    53 
    54                 // 这里仅是为了打印一些信息出来,100000秒后退出
    55                 time_t last_time = time(NULL);
    56                 while ((time(NULL) < (last_time + 100000)))
    57                 {
    58                     Sleep(10);
    59                     // 获取当前播放位置
    60                     libvlc_time_t play_time = libvlc_media_player_get_time(vlc_player);
    61                     printf("playing time : %lld ms
    ", (__int64)(play_time));
    62 
    63                     // 获取媒体的状态
    64                     // libvlc_state_t media_state = libvlc_media_get_state(vlc_media);
    65                     // printf("
    media state : %d
    ", (int)(media_state));
    66                 }
    67                 // 停止
    68                 libvlc_media_player_stop(vlc_player);
    69                 // 释放
    70                 libvlc_media_release(vlc_media);
    71             }
    72 
    73             libvlc_media_player_release(vlc_player);
    74 
    75         }
    76 
    77         libvlc_release(vlc_ins);
    78     }
    79     return 0;
    80 }

     因为是建立了控制台的程序,播放RTSP流的时候控制台上打印出来了core input  error: ES_OUT_RESET_PCR called。

    播放本地AVI的时候,控制台上打印出来了core vout display error: Failed to set on top  

    google了一下,没什么问题,第一个错误消息,可能是网络上的流有什么冲突之类的。第二个错误也不是什么问题。

    references:

    http://www.bubuko.com/infodetail-782716.html

    http://blog.csdn.net/sno_guo/article/details/22388233

     http://stackoverflow.com/questions/31636150/vlclib-error-es-out-reset-pcr

    http://blog.csdn.net/friendan/article/details/45773629

     http://blog.chinaunix.net/uid-26611383-id-3789962.html

    https://github.com/kevin-shanghai/Strong_RTSP_Player

  • 相关阅读:
    pyhton 小技巧
    scikit-learn K近邻法类库使用小结
    机器学习加速方法
    Virtual box安装回退的一系列可能的原因及解决办法
    Linux 定时任务
    Redis 操作命令
    在linux下安装并运行scrapyd
    同步/异步 异步回调 协成 线程队列
    Python常用的标准库以及第三方库有哪些?
    Flask 知识点
  • 原文地址:https://www.cnblogs.com/foohack/p/4749811.html
Copyright © 2020-2023  润新知