视频流-live555音视频同时播放问题

问题描述

live555音视频同时播放问题

我用live555搭了一个rtsp服务端,开了两个队列,一个存放已经编码的H264数据,一个存放已编码的AAC数据。视频帧率15,音频采样率8000。开两个OnDemandMediaSubsession分别处理音频和视频,然后再把他们加到ServerMediaSession。继承Framesource,重写doGetNextFrame,从队列取数据。问题来了,我这样做,只能流畅播放2分钟左右,之后,视频流就会丢帧很严重,画面卡死。然而,我单独播放视频流,或者音频流都是没有问题的。我用的是VLC播放器。各路大神,能指教指教么?

AACFrameSource():
void IPCAACAudioFramedSource::doGetNextFrame() {
unsigned int frame_length;

memset(data, 0, AUDIO_BUFFER_SIZE);
memset(ptv, 0, sizeof(ptv));

fGetAACFrameFunc(data, &frame_length, ptv); //从队列取AAC 数据

//memcpy(fTo, adts_header, 7);
memcpy (fTo, data, frame_length);
fFrameSize = frame_length;
// Next, read the raw frame data into the buffer provided:
if (fFrameSize> fMaxSize) {
fNumTruncatedBytes = fFrameSize - fMaxSize;
fFrameSize = fMaxSize;
}
else
{
fNumTruncatedBytes = 0;
}

// Set the 'presentation time':
if (fPresentationTime.tv_sec == 0 && fPresentationTime.tv_usec == 0) {
// This is the first frame, so use the current time:
gettimeofday(&fPresentationTime, NULL);
} else {
// Increment by the play time of the previous frame:

// fuSecsPerFrame
// = (1024/*samples-per-frame*/*1000000) / fSamplingFrequency/*samples-per-second*/;

unsigned uSeconds = fPresentationTime.tv_usec + fuSecsPerFrame;
fPresentationTime.tv_sec += uSeconds/1000000;
fPresentationTime.tv_usec = uSeconds%1000000;

}

//gettimeofday(&fPresentationTime, NULL);

fDurationInMicroseconds = fuSecsPerFrame;
// Switch to another task, and inform the reader that he has data:
nextTask() = envir().taskScheduler().scheduleDelayedTask(0,
(TaskFunc*)FramedSource::afterGetting, this);

H264FrameSource():
void IPCH264FramedSource::doGetNextFrame() {

fFrameSize = 0;

unsigned int len = 0;
memset(frameData, 0, BUFFER_SIZE);
if(m_getframefunc)
{
//从视频数据队列取数据
    m_getframefunc(frameData, &len, m_nNeedIFrameCount, ptv, findex);
}
else
{
    printf("not have getframefunc!!!
");
    return;
}

fFrameSize = len - 4;   //使用H264VideoStreamDiscreteFramer,故没有前4个字节头

if (fFrameSize > fMaxSize)
{
    fNumTruncatedBytes = fFrameSize - fMaxSize;
    fFrameSize = fMaxSize;
}
else
{
    fNumTruncatedBytes = 0;
}
memcpy(fTo,&frameData[4],fFrameSize);

gettimeofday(&fPresentationTime, NULL);
fDurationInMicroseconds = 0;

nextTask() = envir().taskScheduler().scheduleDelayedTask(0,
            (TaskFunc*)FramedSource::afterGetting, this);

}

unsigned int AMASSIPCH264FramedSource::maxFrameSize() const
{
return 1024*200;
}

解决方案

AV音视频播放同步问题

时间: 2024-12-21 15:23:36

视频流-live555音视频同时播放问题的相关文章

框架-Live555 音视频同时播放 音频OK,视频卡死,为什么?

问题描述 Live555 音视频同时播放 音频OK,视频卡死,为什么? 我们这里现在视频,音频单独播放时很流畅:但是我们合到同一个流时,音频流畅,视频播放几秒后卡死:感觉不像是时间戳问题,应该是流间同步:我们的框架是Live555,请告知下思路,谢谢啦! 之前请求 192.168.1.100:8554/videostream 看视频OK 192.168.1.100:8554/audiostream 听音频OK 合到一块即 192.168.1.100:8554/vastream就音频ok,视频播放

视频、音频打时间戳的方法及其音视频同步(播放)原理

视频.音频打时间戳的方法    http://blog.csdn.net/wfqxx/article/details/5497138 1. 视频时间戳      pts = inc++ *(1000/fps);  其中inc是一个静态的,初始值为0,每次打完时间戳inc加1.     在ffmpeg,中的代码为     pkt.pts= m_nVideoTimeStamp++ * (m_VCtx->time_base.num * 1000 / m_VCtx->time_base.den);  

【FFMpeg视频开发与应用基础】一、使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑

<FFMpeg视频开发与应用基础--使用FFMpeg工具与SDK>视频教程已经在"CSDN学院"上线,视频中包含了从0开始逐行代码实现FFMpeg视频开发的过程,欢迎观看!链接地址:FFMpeg视频开发与应用基础--使用FFMpeg工具与SDK 工程代码地址:FFmpeg_Tutorial 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没有一个人对FFmpeg这个名称感到陌生.FFmpeg是一套非常知名的音视频处理的开源工具,它包含了开发完成的工具软件.封装好的函

视频流-Android端音视频采集到推流这一步,服务器端不需要

问题描述 Android端音视频采集到推流这一步,服务器端不需要 各位大牛,小弟现在因为项目需求,需要做一个android端采集音视频并实时对音视频编解码(AAC/H.264), 然后封包RTMP推送至流媒体服务器,服务器端再实时将可播放的流发送至其他android客户端以支持RTMP协议的流媒体播放. 在网上找了很多文章都大同小异,而且感觉不是很适合. 感觉视频流用MediaRecorder进行H264硬编码 + LocalSocket的方案可行,但要是直接可播放的流貌似应该要先发送SPS和P

如何在PPT中播放多种音视频文件

  在PowerPoint幻灯片制作过程中,我们经常要用到音视频文件,可是在PowerPoint中到底都能播放什么格式的音视频文件呢.今天我就这个话题来和大家探讨一下. 图1 在PowerPoint中往往通过"插入→影片和声音→文件中的影片(或文件中的声音)"来播放音频视频文件,这种方法不方便对音视频进行控制.现在介绍一种利用Media Player控件控制音视频播放的方法.步骤如下: 1.在PowerPoint中插入Media Player控件, 具体方法: ① 打开视图→工具栏→控

在PowerPoint中播放多种音视频文件

在PowerPoint中往往通过"插入→影片和声音→文件中的影片(或文件中的声音)"来播放音频视频文件,这种方法不方便对音视频进行控制.现在介绍一种利用Media Player控件控制音视频播放的方法.步骤如下 1.在PowerPoint中插入Media Player控件, 具体方法: ① 打开视图→工具栏→控件工具箱 ② 选择控件"Windows Media Player" ③ 然后用"+"字形在PowerPoint页面上画出一个矩形,即嵌入一

在PowerPoint里面播放多种音视频文件

在PowerPoint中往往通过"插入→影片和声音→文件中的影片(或文件中的声音)"来播放音频视频文件,这种方法不方便对音视频进行控制.现在介绍一种利用Media Player控件控制音视频播放的方法.步骤如下 1.在PowerPoint中插入Media Player控件, 具体方法: ① 打开视图→工具栏→控件工具箱 ② 选择控件"Windows Media Player" ③ 然后用"+"字形在PowerPoint页面上画出一个矩形,即嵌入一

音视频基础 、IPB帧及其特点

基本概念讲解 媒体:是表示,传输,存储信息的载体,常人们见到的文字.声音.图像.图形等都是表示信息的媒体. 多媒体: 是声音.动画.文字.图像和录像等各种媒体的组合,以图文并茂,生动活泼的动态形式表现出来,给人以很强的视觉冲击力,留下深刻印象 多媒体技术:是将文字.声音.图形.静态图像.动态图像与计算集成在一起的技术.它要解决的问题是计算机进一步帮助人类按最自然的和最习惯的方式接受和处理信息. 流媒体 :流媒体是指采用流式传输的方式在Internet播放的连续时基媒体格式,实际指的是一种新的媒体

音视频封装格式和编码格式

音视频封装格式.编码格式知识        常见的AVI.RMVB.MKV.ASF.WMV.MP4.3GP.FLV等文件其实只能算是一种封装标准. 一个完整的视频文件是由音频和视频2部分组成的.H264.Xvid等就是视频编码格式,MP3.AAC等就是音频编码格式. 例如:将一个Xvid视频编码文件和一个MP3音频编码文件按AVI封装标准封装以后,就得到一个AVI后缀的视频文件,这个就是我们常见的AVI视频文件了.        由于很多种视频编码文件.音频编码文件都符合AVI封装要求,则意味着