经常有人提到Linux和国产系统上的播放器,最近也写了个Linux上的直播播放SDK, 视频绘制使用XLib相关库实现, 音频输出使用PulseAudio和Alsa Lib实现。
目前支持RTMP和RTSP协议直播播放, RTMP支持扩展H265播放, RTSP也支持H265播放.
播放器接口和调用都比较简单, 非常好集成, 下面是最简单的集成调用代码, 这个代码不依赖于QT.
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <errno.h>
#include <string>
#include <sstream>
#include <poll.h>
#include <X11/Xlib.h>
#include <X11/keysym.h>
#include "nt_sdk_linux_smart_log.h"
#include "nt_linux_smart_player_sdk.h"
Display* display_ = nullptr;
Window main_wid_ = None;
const char* win_base_title = "Rtmp/Rtsp Live Player Demo";
int EventPoll(int fd, bool is_write, int timeout_ms)
{
int result;
do
{
struct pollfd info;
info.fd = fd;
if (is_write)
{
info.events = POLLOUT;
}
else
{
info.events = POLLIN | POLLPRI;
}
result = poll(&info, 1, timeout_ms);
} while (result < 0 && errno == EINTR);
return result;
}
bool MY_X11_Pending(Display* display, int timeout_ms)
{
XFlush(display);
if (XEventsQueued(display, QueuedAlready) > 0)
{
return true;
}
if (EventPoll(ConnectionNumber(display), false, timeout_ms))
{
if (XPending(display) > 0)
{
return true;
}
}
return false;
}
Window CreateSubWindow(Display* display, int screen, Window parent)
{
XWindowAttributes parent_win_att;
XGetWindowAttributes(display, parent, &