- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
问题:Libav/FFmpeg 解码管道需要什么才能在解码的 AVFrame 中生成有效的呈现时间戳 (PTS)?
我正在解码通过 RTSP 接收的 H264 流。我使用 Live555 解析 H264 并将流提供给我的 LibAV 解码器。解码和显示工作正常,除了我没有使用时间戳信息并且有些卡顿。
在使用 avcodec_decode_video2
获取帧后,未设置演示时间戳 (PTS)。
我需要 PTS 来找出每帧需要显示多长时间,并避免任何卡顿。
AVCodecContext->extradata
。AVCodecContext->time_base
无效,值为 0/2。time_base
值无效?这些信息在哪里?The RTP timestamp is set to the sampling timestamp of the content. A 90 kHz clock rate MUST be used.
最佳答案
将 live555 pts 复制到 avpacket pts 中。使用 avcodec_decode_video2 处理数据包,然后从 avframe->pkt_pts 中检索 pts,这些将单调递增。
除了在 AVCodecContex extradata 中设置 SPS 和 PPS 之外,无需在编解码器上下文中设置任何内容
你可以在VLC的github中找到一个很好的例子:设置 AVPacket 点:https://github.com/videolan/vlc/blob/master/modules/codec/avcodec/video.c#L983
将 AVPacket 解码为 AVFrame:https://github.com/videolan/vlc/blob/master/modules/codec/avcodec/video.c#L1014
从 AVFrame 中检索点: https://github.com/videolan/vlc/blob/master/modules/codec/avcodec/video.c#L1078
关于c++ - 解码 H264/RTSP 流后未设置 PTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46358285/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在寻找一种方法来检测带有图像点的消息 SCTE35 点。你有什么建议吗? 谢谢你的帮助 最佳答案 到目前为止我已经成功使用了DVBInspector对于这个问题。 关于ffmpeg - 如何使用
当从具有视频和音频流的媒体文件中提取片段而不重新编码(-c 复制)时,指定的请求查找和结束时间很可能不会精确地落在源中的关键帧上。 在这种情况下,ffmpeg 将抓取每个轨道最近的关键帧,并使用不同的
我的应用程序需要在输入的两个(或多个)流之间切换,而只有一个输出(您可以将其视为流多路复用器)。来自输入的帧被解码,然后由于覆盖的东西再次重新编码。 因此,为了安排 AVFrame PTS,我在编码帧
我有一个带有视频和元数据流的 TS。视频已正确设置 PTS 值,而元数据没有(ffprobe 为每个提供 N/A)。但是,元数据包在流中的位置正确。 有没有一种方法可以根据元数据包在流中的位置为它们分
有人可以简要解释一下首字母缩略词 PTS 在视频编码方面的含义吗? 最佳答案 演示文稿时间戳。我不能说它比维基页面更好,在这里找到:http://en.wikipedia.org/wiki/Prese
我正在尝试在输入流上重置 pts 并创建新的 pts 并将流发布到 RTMP。 ffmpeg -re -f lavfi -i "movie=${SOURCE}:s=0+1[out0][out1];[0
假设我有一个来自现有 HLS 的 .ts 文件,我只是想调整它的大小。例如,创建第二个较低分辨率的流,可以在带宽不足时切换。 ffmpeg -i video1080_1.ts -vf "scale=1
我有一个视频,其中包含超出视频数据末尾的一些音频数据包: $> ffprobe -show_packets video.mp4 ... ... ... [PACKET] codec_type=vide
我有一个 mov我需要得到结尾的文件pts对于音频和视频流。我可以通过执行以下操作(手动)来做到这一点: ffprobe -show_packets file.mov 这给了我这样的输出(当然还有更多
我有以下文件: version: 1 n_points: 68 { 55.866278 286.258077 54.784191 315.123248 62.148364 348.908294 83
据我所知,PCR 以 42 位存储,PTS 以 33 位存储在 mpegts 容器中 所以, Max value for PCR is 2^42 = 4398046511104 Max value
我有一个IP摄像机,可以发送8000hz采样率配置的音频和H264视频。 我做了一个程序,从这个IP摄像机生成TS文件,它在VLC,除了iPhone的Android Media Player,Mac
尝试通过 ffmpeg 了解一些音频/视频同步问题,我注意到以下内容。运行此代码 while (av_read_frame(formatCtx, &packet) >= 0) { if (pac
我在从 avi 转码为 mp4(x264) 时遇到了 fps 问题。最终问题出在 PTS 和 DTS 值上,因此在 av_interleaved_write_frame 函数之前添加了第 12-15
我有一个 MPEG2 TS 文件,现在我有兴趣从每个图片帧中提取 PTS 信息。我知道 PTS 是用 33 位描述的,包括 3 个标记位。但是我不知道如何将这个位域转换为更容易理解的形式(秒,毫秒)。
我有一个使用 STDIN 3 的终端 (/proc/xxxx/fd/0 ->/dev/pts/3) 所以如果(在另一个终端)我这样做: echo 'do_something_command' > /d
我正在使用 ffprobe 测试带有 H264 视频的 mp4 文件。 我正在使用以下命令来获取帧信息。 ffprobe -i -show_frames -select_streams v 我得到以
我们有一些处理视频的 FFmpeg 信封。 视频的树首帧为:B -> B -> I 如下图: PTS 和 DTS 对第一帧返回负数: 我们有一些代码会跳过某个时间点以下的帧(第一帧为 0)。 是否可以
我一直在使用从 python 脚本调用的 ffmpeg 命令对文件文件夹进行转码: ffmpeg -y -i in_file.mov -loglevel warning -codec:v libx26
我是一名优秀的程序员,十分优秀!