导航:首页 > 源码编译 > demux源码

demux源码

发布时间:2022-09-14 02:47:01

A. gstreamer 中那些gst-launch 命令怎么转换成c语言

gst-launch **
首先你要建一个pipeline,然后根据gst-launch后面的插件,建立相应的facotry就行了,类似这样
source = gst_element_factory_make("filesrc", "filesrc");
return_val_if_fail(source,FALSE);
g_print("Good source Element\n");

GstElement *rtpmp2tdepay = gst_element_factory_make("rtpvp8depay",NULL);
if(!rtpmp2tdepay) {
g_print("rtpmp2tdepay == NULL\n");
}
最后到分流,建立相应的pad,最后设置state

B. ubuntu下用mplayer播放rm时的Not audio/video stream or unsupported错误

在新立得软件管理器中搜索mplayer的相关的一切,然后标记已安装的,彻底删除,然后从新安装mplayer应该能解决问题,估计是你修改了什么设置造成的。最简单的办法就是重新下载安装或者是直接到官网上编译安装就ok了,这个问题如果还再次出现的话,可以考虑一下解码器的问题。当然如果用你搜到的办法的话,我教你怎么改:
先用上面的方法卸载掉mplayer,然后打开你从mplayer官网下的src包(源码包,不是deb,也不是rpm,应该是tar.gz为后缀名的),找到libmpdemux这个文件夹下的demux_real.c这个文件,然后双击打开(默认应该是用gedit打开的),crtl+f调出搜索器,输入“Not audio/video stream or unsupported”,然后在找到的地方从前面的“else {
mp_msg”到这段以“}”结尾的地方删掉或者是在else前加个”#“(这就是注释)然后源码的修改就ok了。看了你的提问,估计你也不会编译安装,给你提供个解决的方法。
修改完源码后,打开“终端”,
先添加编译安装的程序:sudo apt-get install libgtk2.0-dev
apt-get install build-essential
然后接着在里面输入sudo cd ,同时将你下载的源码包拖入终端界面(或者是自己找到源码包所在的文件夹位置这一切都是在你解压缩后进行的),这时你就可以进行编译了。
编译的方法参见:http://hi..com/gaomingjm/blog/item/c11ac1634d5b06640c33fafc.html

这个问题貌似是老版本的mplayer的bug,你可以sudo apt-get update以后再install mplayer。

C. ubuntu下用mplayer播放rm时的Not audio/video stream or unsupported错误

在新立得软件管理器中搜索mplayer的相关的一切,然后标记已安装的,彻底删除,然后从新安装mplayer应该能解决问题,估计是你修改了什么设置造成的。最简单的办法就是重新下载安装或者是直接到官网上编译安装就ok了,这个问题如果还再次出现的话,可以考虑一下解码器的问题。当然如果用你搜到的办法的话,我教你怎么改: 先用上面的方法卸载掉mplayer,然后打开你从mplayer官网下的src包(源码包,不是deb,也不是rpm,应该是tar.gz为后缀名的),找到libmpdemux这个文件夹下的demux_real.c这个文件,然后双击打开(默认应该是用gedit打开的),crtl+f调出搜索器,输入“Not audio/video stream or unsupported”,然后在找到的地方从前面的“else { mp_msg”到这段以“}”结尾的地方删掉或者是在else前加个”#“(这就是注释)然后源码的修改就ok了。看了你的提问,估计你也不会编译安装,给你提供个解决的方法。 修改完源码后,打开“终端”, 先添加编译安装的程序:sudo apt-get install libgtk2.0-dev apt-get install build-essential 然后接着在里面输入sudo cd ,同时将你下载的源码包拖入终端界面(或者是自己找到源码包所在的文件夹位置这一切都是在你解压缩后进行的),这时你就可以进行编译了。 编译的方法参见: http://hi..com/gaomingjm/blog/item/c11ac1634d5b06640c33fafc.html 这个问题貌似是老版本的mplayer的bug,你可以sudo apt-get update以后再install mplayer。

D. gst_element_factory_make( "ffdemux_avi", "avi-demuxer" ); ubuntu中GStreamer编avi为什么返回空

这要看你系统中装的解码器类型了,查看下有没有在ubuntu上装avi的解码器。gst_element_factory_make会做两步操作
gst_element_factory_find和gst_element_factory_create,建议你看下这个的源码。

E. 什么播放器能打开MP4文件

KMPlayer 2.9.1.1045 简体中文汉化版(无捆绑垃圾软件)

http://wise.togame.net:80/temp/HA-Kmplayer.exe

这是韩国高手写的一个全能媒体播放器。和其它全能播放器一样,只要您的系统内安装有所需要的解码器或者筛选器,这个播放器就可以播放那类文件。所不同的是,相对于其它大型播放软件,她是那么的小巧,但就是这个小小的播放器,她的功能之多,项目之全,目前可以称得上是“天下无敌”,只要您能想到的功能她几乎都有,甚至您想不到的功能她也有,例如我发现她的“音频与视频同步”和“声道调整”功能是任何播放软件都没有的,而且这两个功能是看各种电影必需的。该播放器用于看各类电影绝对是首选播放器!而且其支持几乎所有外接筛选器和解码器,甚至支持 Winamp 的一些插件,而且其外观小巧而纤美,支持开发皮肤外观,各种外衣使她犹如一位清纯而不失华贵,待字闺中的小公主。原来我的系统内曾经安装有 WMP 、Realplayer 及 hero 等播放器。自从有了她,我计算机就只安装各类解码器,其它播放器统统都“下岗”了。
KMPlayer The Professional Media Player!
它支持 Winamp 2/5 的输入、常规、DSP、视觉效果、媒体库插件。无须注册表支持直接调用 Directshow 滤镜!FFdshow 的视觉特效系统~超强的 GUI 界面~安装电视卡后可以直接代替原软件直接收看电视~支持播放 DVD/VCD 以及绝大多数电脑的媒体文件(AVI 支持 Xvid/DivX/3vid/H264 OGG/OGM/MKV 容器/AC3/DTS 解码~Monkey Audio 解码~)强烈推荐!此播放器除了会将自己的配置信息写入注册表外绝对绿色~

F. ubuntu下使用mplay时的Not audio/video stream or unsupported错误

这么说吧,你要找的demux_real.c这个文件在我下面提示的源码包里,其实真实的文件位置是mplayer源码包的/libmpdemux/这个路径,demux_real.c这个文件就在里面。你双击下载好的源码包后,找到libmpdemux这个文件夹,然后进入里面就可以找到demux_real.c了。这个问题的核心是你不懂得如何通过编译源码安装软件。只要搞定了如何编译,你修改过的源码安装后你的问题就解决了。下面继续说你上个提问没说清的问题:
我前面说过让你上mplayer官网上下载一个源码包,地址是http://www.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc2.tar.bz2
同时还必须下载相应的gui皮肤和解码器:
解码器:http://www.mplayerhq.hu/MPlayer/releases/codecs/all-20071007.tar.bz2
skin,我用的是New age:http://www.mplayerhq.hu/MPlayer/skins/new-age-1.0.tar.bz2
essential:http://www.mplayerhq.hu/MPlayer/releases/codecs/essential-20061022.tar.bz2
下载完以上文件后,我们需要安装编译需要的程序:libgtk2.0-dev和bulid-essential。
打开“终端”,
先添加编译安装的程序:sudo apt-get install libgtk2.0-dev
apt-get install build-essential
到此时,你的编译环境就搭建好了。可以进入编译程序的主题。
首先分别建立MPlayer主目录,MPlayer Linux解码器目录和mplayer的win32解码器目录。
sudo mkdir /usr/local/mplayer
sudo mkdir /usr/lib/codes
sudo mkdir /usr/lib/win32codes
然后运行tar jxvf +源码包存放的位置(可以右键属性查看具体的路径),解压缩后源码包应该就是在你的主文件夹里面,找到以后按我最上面告诉你的方法找到文件后修改相应的文件,修改完成后记得一定要保存。
下面就是具体的编译过程:sudo cd +解压缩后的源码文件夹(一般是/home/当前用户名/源码文件夹),然后输入
./configure --enable-gui --datadir=/usr/share/mplayer \
--libdir=/usr/local/lib/codecs --language=en \
--with-reallibdir=/usr/local/lib/codecs/rp \
--with-win32libdir=/usr/local/lib/codecs/win32
--enable-gui:使MPlayer可以使用图形界面

--datadir=/usr/share/mplayer:设置字体和skin所在目录,取决于你刚才拷贝的目录

--libdir=/usr/local/lib/codecs:设置解码器所在目录

--language=en:设置MPlayer的界面语言为英语,同样可以设置为zh来显示中文。(不过好像不管用)

--with-reallibdir=/usr/local/lib/codecs/rp:设置real文件解码器目录

-- with-win32libdir=/usr/local/lib/codecs/win32:设置win32解码器目录。
注意,win32解码器不是必须的,但是设置这个目录是有必要的,不然如果你设置了libdir,但是没有设置win32目录,MPlayer在运行时会提示错误信息(但是还能运行)。等configure结束了,下面就简单了,直接make(这一步花费时间有点长,可以用-s参数来减少一些不必要的echo),然后make install(别忘了sudo)。这样MPlayer就安装到了系统中。 configure过程中如果提示有相应的包没有存在的话,可以进入新立得软件包中搜索相应的包然后安装。
最后,我们要把下载好的皮肤用sudo -r 命令将皮肤文件拷贝到/usr/share/mplayer/skins
解码器拷贝到/usr/local/lib/codecs
(解码器需要用上面相同的方法解压缩以后再),如果播放文件提示缺少解码器的话,可以用sudo apt-get install gstreamer0.10-tools gstreamer0.10-x gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-plugins-bad gstreamer0.10-ffmpeg gstreamer0.10-alsa gstreamer0.10-schroedinger gstreamer0.10-pulseaudio 安装gstreamer解码器(这种情况不大可能出现)。
mplayer rc2版本还有一个播放rmvb文件时提示出错的问题,解决的办法是在官方网站上下载http: //www1.mplayerhq.hu/MPlayer/releases/codecs/essential-20061022.tar.bz2在前 面的拷贝解码器那一步把其中的几个文件拷到解码器目录
完成所有的步骤以后你可以在终端或者“开始”-“影音程序”—“Mplayer”运行mplayer或者gmplayer命令。其中gmplayer是启动带图形操作界面的mplayer,当然了你必须在configure时启用了enable-gui选项并且你的skin安装正确了。

G. FFmpeg调研报告

FFmpeg 是非常强大的多媒体编解码框架,堪称多媒体处理的瑞士军刀,是集录制,转码,流的完整的跨平台多媒体解决方案。本身涵盖了大量的多媒体处理工具。

而我们常说的视频,其实是包含的视频,音频甚至还有字幕的一个整体。因为视频本身是三维的数据,在计算中直接存储空间非常大,通常无法接受,所以,会对其进行一些编码和压缩,这个过程通常是有损的,但却极大了降低了它的存储空间。

视频数据相比位图数据多了一维,但其本身还是由像素点组成。

编码、压缩在流媒体领域是一项非常重要的技术:从 H264码流 到 YUV流 的过程称为 解码 ,反之称为 编码 。

帧是流的基本元素,即视频流中的图像。在原始流里,各帧都一样。但经过编码压缩后的帧,通常分为下面几种:

注意:I、P、B帧,并不是依据视频帧数据内部的元素的不同来区分的,从解码后的帧本身而言,它们没有任何区别。仅仅是在编码时,对帧处理的方式不同而已。

首先视频文件与视频编码格式是两个概念。

一般包括以下部分:

FFmpeg 处理视频转码时的常规过程如下:

各自状态的数据产物如下:

视频中会有音频,视频,它们在文件有各自的编码压缩方式,但为了传输过程方便,将压缩过的音频和视频捆绑在一起进行传输。首先就需要将媒体文件中的各个音频,视频,字幕流等分开。
这一步叫Demux(解复用)。总结就是把不同的流从某种容器(文件)中解析出来。如上图所示,并且,一个媒体文件中,还可以分别有不止一个音频,视频和字幕流。

媒体数据为了降低存储量,针对里面的音频,视频,字幕等都会采取特定方式的编码压缩。
这一步便对各自的流采用其对应的解码算法进行处理。得到原始流。
即这一步是以帧为单位实现压缩数据到原始数据转换。

这一步再按照目标的编码方式对流进行编码。即这一步是以帧为单位实现原始数据到压缩数据转换。

Demux的逆操作,把不同的流按照某种容器的规则放入容器

按照编解码器的位置划分:

FFmpeg中filter分为:

因其仅有解码部分的硬件加速,缺少编码部分的加速。且Nvidia有单身以NVENC和NVDEC替代掉这一块的意思,这里不多做细节介绍。细节请看 文档

支持的格式有:

优点:

各种型号的设计支持情况请看 Video Encode and Decode GPU Support Matrix

查看硬件支持:

使用CUDA解码:

使用CUVID解码:

转码,使用NVDEC和NVENC

可以使用 -hwaccel_device <id> 指定GPU。GPU id可以通过 nvidia-smi 查看

该方案一般通过QSV来进行加速。QSV(Quick Sync Video)即Intel的集成加速器,该方便优缺点如下:

优点:

查看CPU是否支持的方法如下:

该方案支持h264,h265,mjpeg,mpeg2video,vp8,vp9的编解码,和vc1的解码。

更细节的支持情况如下:

解码支持情况:

编码支持情况:

QuickSync对于编码解码在CPU使用率上都有着非常不错的提升。编码提升效果特别明显。
关于抽帧的各种表现,待之后测试补上。TODO

更多细节可以参考官方 文档

FFmpeg使用QSV加速的一些命令行参数可 参考

使用ffprobe提取出IPB帧的时间

抽取IPB帧到jpg图片:

抽帧流程其实与转码类似,一样是输入视频文件,对视频文件进行Demux,解码视频流,得到原始视频帧,然后挑选相应的视频帧按jpeg编码,mux输出到一个个文件中。

那么要加快抽帧的效率,便是想办法加快上面这各个阶段的速率

抽帧会伴随着大量的文件输出。在有很多抽帧任务并行时,理论上会对磁盘造成大量的随机写入。

其他途径优化:

结合以上各节点,这里列出一些进一步的调研方向:

此方案针对加快解码,加快编码。基于目前的信息来看:

该方案会有非常大的优化效果,若有足够支持QSV的CPU机器,那么该方案可行性非常大。

待进一步补充相关测试数据

同上,针对解码编码方面尝试加快进行优化。目前情况:

该方案理论上也应该会有不错的优化效果。但就目前的一些简单测试来看,即使能达到好的加速效果,其成本也未必能够接受

待进一步补充相关测试数据

该方案针对加快数据读取和数据输出。考虑的点主要是整个抽帧过程中是否对视频文件有不小量的随机读取,大量抽帧任务并行时,会有巨量的图片输出。这块是否会产生大量的随机写入,降低效率。

待进一步补充相关测试数据

该方案针对加解码(更确切地说是减少不必要的解码操作)

例如对于一秒一帧的均匀抽帧,我们针对这种情况,修改为,尽量抽取每一秒中的关键帧。做个伪的一秒一帧的均匀抽帧。这种模式不一定能为所有抽帧情况加速,但若能为大头的需求加速也不错

待进一步测试验证可行性及补充相关测试数据

针对解码编码方面尝试加快进行优化。

ffmpeg中,同样格式可能有多个编码解码器,比如jpeg的就会有mjpeg,libjpeg等。不同的库实现,性能,质量会有一些差距,通过测试实验,改善参数,或许一定程度上能优化性能。

待进一步补充相关测试数据

针对流程的优化。如前面的单帧抽帧, -ss 参数的不同位置会影响 ffmpeg 抽取的时间。理论上,ffmpeg 本身设计是为了通用,而对于专用于抽帧的场景,ffmpeg本身可能存在一些没必要的工作,尝试通过参数和源码级别来优化,或许能省掉这部分的资源消耗。

待进一步补充相关测试数据

TODO

FFmpeg官网
3GP/MP4 视频文件格式解析及其播放原理(转)
FFmpeg视频抽帧那些事
FFmpeg原理和架构
FFmpeg 硬件加速方案概览 (上)
FFmpeg 硬件加速方案概览 (下)
FFmpeg wiki HWAccelIntro
视频和视频帧:FFMPEG+Intel QSV硬解的环境安装篇
视频和视频帧:视频和帧基础知识整理

阅读全文

与demux源码相关的资料

热点内容
卡尔曼滤波算法书籍 浏览:763
安卓手机怎么用爱思助手传文件进苹果手机上 浏览:840
安卓怎么下载60秒生存 浏览:800
外向式文件夹 浏览:232
dospdf 浏览:428
怎么修改腾讯云服务器ip 浏览:382
pdftoeps 浏览:490
为什么鸿蒙那么像安卓 浏览:732
安卓手机怎么拍自媒体视频 浏览:183
单片机各个中断的初始化 浏览:721
python怎么集合元素 浏览:477
python逐条解读 浏览:829
基于单片机的湿度控制 浏览:496
ios如何使用安卓的帐号 浏览:879
程序员公园采访 浏览:807
程序员实战教程要多长时间 浏览:970
企业数据加密技巧 浏览:132
租云服务器开发 浏览:809
程序员告白妈妈不同意 浏览:332
攻城掠地怎么查看服务器 浏览:597