首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏软件研发

    讲解Application provided invalid, non monotonically increasing dts to muxer in str

    讲解Application provided invalid, non monotonically increasing dts to muxer in stream 0: -92233720368547 近期在处理视频编码的过程中,我遇到了一个错误:“Application provided invalid, non monotonically increasing dts to muxer in stream 错误消息中提到的“dts”就是时间戳中的一个重要概念,表示解复用器(Muxer)所使用的解码时间戳(Decoding Timestamp)。 检查视频解复用器(Muxer)设置:检查视频解复用器的设置,确保其接收到的时间戳是单调递增的。如果解复用器设置不正确,可能会导致时间戳错误。 解复用器(Muxer)是一种多媒体处理工具,用于将多个不同编码格式(如音频、视频、字幕等)的媒体流混合在一起,并封装为一个容器格式文件(如MP4、MKV等)。

    3K10编辑于 2023-12-20
  • 来自专栏音视频处理

    ffmpeg4.x为什么不再需要调用av_register_all呢

    ] = { &ff_a64_muxer, &ff_ac3_muxer, &ff_adts_muxer, &ff_adx_muxer, &ff_aiff_muxer , &ff_alp_muxer, &ff_amr_muxer, ......, } 有的同学会发现自己的源代码并没有libavformat\muxer_list.c文件. AVOutputFormat muxer_list $MUXER_LIST ...... 新版ffmpeg这个函数也是废弃了, 遍历复用器用 av_muxer_iterate. libavformat\allformats.c: const AVOutputFormat *av_muxer_iterate (void **opaque) { static const uintptr_t size = sizeof(muxer_list)/sizeof(muxer_list[0]) - 1;

    8.1K20编辑于 2021-12-04
  • 来自专栏阿利民

    「Android音视频编码那点破事」第六章,使用MediaMuxer对音视频进行混合封装

    */ start() /** * 用于向Muxer写入编码后的音视频数据。 我们先来构造一个Muxer,需要两个参数,第一个是音视频文件的保存路径,第二个是音视频封装文件的格式,可以选择mp4或3gp,我们使用mp4就好。 = MediaMuxer(path, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4) }   因为我们需要在添加音频和视频轨道之后才能开启Muxer,所以分别用两个 bool来标记对应的轨道已经添加,并且每次添加轨道时,都使用ready()检查是否可以开启Muxer。 : MediaFormat) { try { videoTrack = muxer!!.

    1.2K20编辑于 2022-05-16
  • 来自专栏关键帧Keyframe

    iOS AVDemo(11):视频转封装,从 MP4 到 MP4丨音视频工程示例

    @end NS_ASSUME_NONNULL_END 2、音视频封装模块 视频编码模块即 KFMP4Muxer,复用了《iOS 音频封装 Demo》中介绍的 muxer,这里就不再重复介绍了,其接口如下 *)muxer { if (! _muxer) { _muxer = [[KFMP4Muxer alloc] initWithConfig:self.muxerConfig]; } return dispatch_async(dispatch_get_global_queue(0, 0), ^{ [self.muxer startWriting]; while ( stopWriting:^(BOOL success, NSError * _Nonnull error) { NSLog(@"KFMP4Muxer complete:

    1.1K20编辑于 2022-06-13
  • 来自专栏猫哥的专栏

    【Android 音视频开发打怪升级:OpenGL渲染视频画面篇】六、Android音视频硬编码:生成一个MP4

    定义编码器变量 完整代码请查看 BaseEncoder abstract class BaseEncoder(muxer: MMuxer, width: Int = -1, height: Int = 初始化编码器 abstract class BaseEncoder(muxer: MMuxer, width: Int = -1, height: Int = -1) : Runnable { ): Boolean { return false } override fun release(muxer: MMuxer) { muxer.releaseVideoTrack ) { muxer.writeAudioData(byteBuffer, bufferInfo) } override fun release(muxer: MMuxer) { muxer.releaseAudioTrack() } } 可以看到,configEncoder 实现也比较简单: i.

    2.6K30发布于 2020-04-02
  • 来自专栏猫哥的专栏

    【Android 音视频开发打怪升级:FFmpeg音视频编解码篇】七、Android FFmpeg 视频编码

    protected: // Mp4 封装器 Mp4Muxer *m_muxer = NULL; //-------------子类需要复写的方法 begin----------- 实现 BaseEncoder 初始化 // BaseEncoder.cpp BaseEncoder::BaseEncoder(JNIEnv *env, Mp4Muxer *muxer, AVCodecID Release() override; public: VideoEncoder(JNIEnv *env, Mp4Muxer *muxer, int width, int height); // AudioEncoder.cpp AudioEncoder::AudioEncoder(JNIEnv *env, Mp4Muxer *muxer) : BaseEncoder(env, muxer = new Mp4Muxer(); m_mp4_muxer->Init(env, dst_path); m_mp4_muxer->SetMuxFinishCallback(this);

    1.9K20发布于 2020-10-26
  • 来自专栏关键帧Keyframe

    iOS AVDemo(9):视频封装,采集编码 H.264/H.265 并封装 MP4丨音视频工程示例

    @end NS_ASSUME_NONNULL_END 3、视频封装模块 视频编码模块即 KFMP4Muxer,复用了《iOS 音频封装 Demo》中介绍的 muxer,这里就不再重复介绍了,其接口如下 *)muxer { if (! _muxer) { _muxer = [[KFMP4Muxer alloc] initWithConfig:self.muxerConfig]; } return self.isWriting) { // 启动封装, [self.muxer startWriting]; // 标记开始封装写入。 3)在编码模块的数据回调中获取编码后的 H.264/H.265 数据,并将数据交给封装器 KFMP4Muxer 进行封装。

    68620编辑于 2022-06-13
  • 来自专栏关键帧Keyframe

    iOS AVDemo(3):音频封装,采集编码并封装为 M4A丨音视频工程示例

    KFMP4Muxer.m #import "KFMP4Muxer.h" #import <AVFoundation/AVFoundation.h> #define KFMP4MuxerAddOutputError 因为后面创建 Muxer 实例的输入源时也需要从队列中的音视频数据中获取相关格式信息。 *)muxer { if (! _muxer) { _muxer = [[KFMP4Muxer alloc] initWithConfig:self.muxerConfig]; _muxer.errorCallBack [self.muxer stopWriting:^(BOOL success, NSError * _Nonnull error) { NSLog(@"KFMP4Muxer %@", success

    79920编辑于 2022-06-13
  • 来自专栏曾大稳的博客

    MediaCodec录制音视频并将合成为一个文件

    //MediaMuxer muxer = new MediaMuxer("temp.mp4", OutputFormat.MUXER_OUTPUT_MPEG_4); // More often (audioFormat); int videoTrackIndex = muxer.addTrack(videoFormat); ByteBuffer inputBuffer audioTrackIndex : videoTrackIndex; muxer.writeSampleData(currentTrackIndex, inputBuffer, bufferInfo ); } }; muxer.stop(); muxer.release(); 主要步骤如下: 初始化 mMediaMuxer = new MediaMuxer (savePath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4); 获取录制音视频的TrackIndex int outputBufferIndex =

    2.5K42发布于 2020-01-20
  • 来自专栏Android机动车

    Android用MediaExtractor和MediaMuxer合成音视频

    //能获取的视频的最大值 int frameRate = 0; //视频的帧率 long frameDuration = 0; MediaMuxer muxer = null; //用于合成音频与视频 try { muxer = new MediaMuxer(combinedVideoOutFile.getPath(), MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4); audioVideoExtractor.setDataSource(audioVideoPath audioVideoExtractor.release(); frameVideoExtractor.release(); if (muxer = null) { muxer.release(); } } }

    3.3K30发布于 2018-08-03
  • 来自专栏码上就说

    FFmpeg代码架构

    因为一般不是直接操作解封装器Demuxer和封装器Muxer,而是通过AVFormatContext来操作它们。 对输出视频流的写操作,用于输出处理,也就是使用封装器Muxer对视频流进行操作,是写操作。 ? AVOutputFormat 封装器 Muxer,对应的结构体是AVOutputFormat,也是一个接口,功能是对编码后的音视频封装进格式容器的工具。简单说,就是打包工具。 跟解封装器 Demuxer类似,也是MP4、MP3、FLV等格式的实现,差别是封装器 Muxer用于输出。 与demuxer类似,muxer的种类很多,可以看一下muxer_list.c文件。 下面看一下mp3的muxer,在mp3enc.c中: AVOutputFormat ff_mp3_muxer = { .name = "mp3", .long_name

    2K20发布于 2020-11-11
  • 来自专栏关键帧Keyframe

    Android AVDemo(11):视频转封装,从 MP4 到 MP4丨音视频工程示例

    } 2、音视频封装模块 视频编码模块即 KFMP4Muxer,复用了《Android 音频封装 Demo》中介绍的 muxer,这里就不再重复介绍了,其接口如下: KFMP4Muxer.java public class KFMP4Muxer { public KFMP4Muxer(KFMuxerConfig config, KFMuxerListener listener); ///< 构造方法,配置、 private KFMP4Muxer mMuxer; ///< 封装器。 private KFMuxerConfig mMuxerConfig; ///< 封装配置。 mDemuxer = new KFMP4Demuxer(mDemuxerConfig,mDemuxerListener); mMuxer = new KFMP4Muxer

    1.2K30编辑于 2022-11-29
  • 来自专栏关键帧Keyframe

    Android AVDemo(9):视频封装,采集编码 H.264/H.265 并封装 MP4丨音视频工程示例

    public void flush(); } 3、视频封装模块 视频编码模块即 KFMP4Muxer,复用了《Android 音频封装 Demo》中介绍的 muxer,这里就不再重复介绍了,其接口如下 : KFMP4Muxer.java public class KFMP4Muxer { public KFMP4Muxer(KFMuxerConfig config, KFMuxerListener private KFMP4Muxer mMuxer; ///< 封装器。 private KFMuxerConfig mMuxerConfig; ///< 封装配置。 true,mediaFormat,mVideoEncoderListener,mGLContext.getContext()); mMuxer = new KFMP4Muxer 4)在编码模块的数据回调中获取编码后的 H.264/H.265 数据,并将数据交给封装器 KFMP4Muxer 进行封装。

    83620编辑于 2022-06-13
  • 来自专栏音视频咖

    WebRTC 与 FFmpeg 相继发布最新版本

    chromanr video filter VDPAU accelerated HEVC 10/12bit decoding ADPCM IMA Ubisoft APM encoder Rayman 2 APM muxer AV1 encoding support SVT-AV1 Cineform HD encoder ADPCM Argonaut Games encoder Argonaut Games ASF muxer afreqshift and aphaseshift filters High Voltage Software ADPCM encoder LEGO Racers ALP (.tun & .pcm) muxer AV1 VAAPI decoder adenorm filter ADPCM IMA AMV encoder AMV muxer NVDEC AV1 hwaccel DXVA2/D3D11VA hardware IMX decoder Simbiosis IMX demuxer Digital Pictures SGA demuxer and decoders TTML subtitle encoder and muxer

    1.6K20发布于 2021-04-29
  • 来自专栏菠萝上市没有

    libp2p之mdns简单使用

    tcp_transport) .map(|either_output, _| match either_output { Either::Left((peer_id, muxer )) => (peer_id, StreamMuxerBox::new(muxer)), Either::Right((peer_id, muxer)) => (peer_id , StreamMuxerBox::new(muxer)), }) .boxed(); let mdns = mdns::async_io::Behaviour

    84830编辑于 2023-09-28
  • 来自专栏码上就说

    HLS合成为一整个视频之解决DTS不连续问题

    Application provided invalid, non monotonically increasing dts to muxer in stream 1: 11264 >= 0 这个问题已经找到解决的方案了 首先还是要回到源码, ffmpeg源码中的mux.c文件======>compute_muxer_pkt_fields函数 我截取了最核心的判断逻辑 if (st->cur_dts && st- (s, AV_LOG_ERROR, "Application provided invalid, non monotonically increasing dts to muxer If not set, the muxer will not receive a NULL packet in the write_packet function. */ #define AVFMT_TS_NONSTRICT (s, AV_LOG_ERROR, "Application provided invalid, non monotonically increasing dts to muxer

    3.4K10发布于 2021-04-13
  • 来自专栏bluesummer

    StackExchange.Redis学习笔记(一) Redis的使用初探

    // //return ConnectionMultiplexer.Connect(options); 271 // ConnectionMultiplexer muxer = ConnectionMultiplexer.Connect(Coonstr); 272 // muxer.ConnectionFailed += MuxerConnectionFailed ; 273 // muxer.ConnectionRestored += MuxerConnectionRestored; 274 // muxer.ErrorMessage += MuxerErrorMessage; 275 // muxer.ConfigurationChanged += MuxerConfigurationChanged; 276 // muxer.HashSlotMoved += MuxerHashSlotMoved; 277 // muxer.InternalError += MuxerInternalError

    1.5K20编辑于 2022-03-10
  • 来自专栏全栈程序员必看

    ffplay使用

    'muxer=muxer_name' 打印名称为 "muxer_name" 的 muxer 的详细信息 10.

    87520编辑于 2022-07-04
  • 来自专栏python3

    Python 播放声音 音频与beep

    env python import pymedia.audio.acodec as acodec import pymedia.audio.sound as sound import pymedia.muxer as muxer file_name = 'thesong.ogg' dm = muxer.Demuxer(str.split(file_name, '.')[-1].lower()) f = open

    2.1K10发布于 2020-01-07
  • 来自专栏python3

    python 播放声音

    python import pymedia.audio.acodec as acodec import pymedia.audio.sound as sound import pymedia.muxer as muxer file_name = 'thesong.ogg' dm = muxer.Demuxer(str.split(file_name, '.')[-1].lower()) f

    1.6K20发布于 2020-01-08
领券