zoukankan      html  css  js  c++  java
  • 用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

  • 相关阅读:
    Tomcat的SessionID引起的Session Fixation和Session Hijacking问题
    别把项目成功当目标!——项目经理的误区(1)(转)
    技术,项目经理的命?——项目经理的误区(3)(转)
    项目管理中,最难管的是什么?(转)
    项目经理的超越(三)人际优先,做事上的超越(转)
    大丈夫不可一日无权啊!——项目经理的误区(2)(转)
    舌尖上的职场(二)一起去吃饭吧!(转)
    舌尖上的职场(一)你最近还好吗?(转)
    【项目经理之修炼(10)】《初级篇》人际关系问题也是可以避免的(转)
    gcc与g++区别
  • 原文地址:https://www.cnblogs.com/foohack/p/4749811.html
Copyright © 2011-2022 走看看