任何人都可以解释一下mpeg-ts的工作原理.我已经完成了规范文档,但没有理解为什么将多个流组合在一起形成一个流.
我还使用媒体信息工具打开了一个.ts文件,而对于Audio,它显示了2个音频流.那么在播放内容时将使用哪个音频流.
这是我在这里发表的第一篇文章,希望能找到一些帮助
我正在使用三星ok6410主板和ov9650 cmos相机上的嵌入式Linux
我必须捕获视频并将其保存在SD卡上
我想使用一个捕获视频的循环缓冲区,当它已满时,允许新数据覆盖旧数据.
有一个标志,当提升时,捕获持续10秒然后停止.视频保存到SD卡应该包含提升标志前10秒和提升后10秒.
我在这里阅读了v4l2 API规范官方网站上的捕获示例
http://free-electrons.com/kerneldoc/latest/video4linux/API.html
但有一点我无法理解或不知道我是否理解正确
在这个例子中,有4个帧缓冲区,每个缓冲区可以容纳一个帧.这是正确的吗?
有一个变量(frame_count)被初始化为70,这是否意味着通过完成这个程序,我将有一个包含70帧的视频?
fns(主循环)和(读框)有什么作用?我知道他们应该做什么,但无法理解书面代码,循环......等等
如何在此代码中调整fps?或者我应该在相机寄存器中写入值?
捕获视频后,我将有一个填充原始数据的缓冲区,我想压缩它或使用编解码器将其保存为MPEG,我可以更改要压缩的像素格式(例如MPEG)而不是YUYV吗?或者我该怎么做才能压缩视频?编解码器还是什么?
我可以将缓冲区中的这些原始数据写入文件.yuv吗?我找到了一些可以播放这种格式视频的软件.
是否可以使用循环缓冲区而不是线性缓冲区来保存捕获的视频?
我知道我的帖子太长了,但我是新手,找不到任何可以帮助我编写代码的教程.
提前致谢
我正在尝试提取有关TS数据包中帧类型的信息.使用FFMEPG我发送MPEG TS封装视频(用x264压缩),另一方面我用Wireshark记录收到的数据包.我的数据包长188个字节,对应一个MPEG TS数据包.现在我需要找出哪些TS包携带I,P或B帧数据.
我试图在我的数据中检测到图片标题(00 00 01 00),基于这篇文章:http: //forum.digital-digest.com/f4/help-extract-i-frames-mpeg2-ts-89736.html 但我找不到它.我可以注册的是PES包的开始(00 00 00 01 E0).我对这些格式感到困惑.PES的哪一部分说哪种帧类型的一个TS数据包传输?
谢谢.
我正在使用以下管道播放传输流文件 (*.ts):
gst-launch-0.10 playbin2 uri=file:///c:/bbb.ts
Run Code Online (Sandbox Code Playgroud)
但我需要自己将其转换为管道。我不确定如何实现这一目标。
到目前为止,我已经尝试过:(工作正常)
gst-launch-0.10 -v filesrc location=c:/bbb.ts ! tsdemux ! audio/x-ac3 ! fakesink
Run Code Online (Sandbox Code Playgroud)
但是,如果我用 autoaudiosink 替换 fakesink,它会因未链接错误而失败。
甚至 fakesink 也不适用于视频:
gst-launch-0.10 -v filesrc location=c:/bbb.ts ! tsdemux ! video/x-mpeg2 ! fakesink
Run Code Online (Sandbox Code Playgroud)
所以我有两个问题:
如果MPD文件没有任何段URL列表,如何确定DASH介质的段数?它只有一个段模板,因此我不知道与该MPD关联的媒体有多少段.这是我正在谈论的MPD:
<MPD type="static" xmlns="urn:mpeg:DASH:schema:MPD:2011" profiles="urn:mpeg:dash:profile:full:2011" minBufferTime="PT1.5S" mediaPresentationDuration="PT0H1M59.89S">
<ProgramInformation moreInformationURL="http://gpac.sourceforge.net">
<Title>Media Presentation Description for file hdworld_0696kbps_ffmpeg_track1.mp4 generated with GPAC </Title>
</ProgramInformation>
<Period start="PT0S" duration="PT0H1M59.89S">
<AdaptationSet>
<ContentComponent id="1" contentType="video"/>
<SegmentTemplate initialization="/$Bandwidth$/hdworld_ffmpeg_track1_dash.mp4" timescale="1000" duration="4920" media="/$Bandwidth$/hdworld_ffmpeg_track1_$Number$.m4s" startNumber="1"/>
<Representation id="1" mimeType="video/mp4" codecs="avc1.64001f" width="1280" height="720" startWithSAP="1" bandwidth="534343"/>
<Representation id="2" mimeType="video/mp4" codecs="avc1.64001f" width="1280" height="720" startWithSAP="1" bandwidth="812553"/>
<Representation id="3" mimeType="video/mp4" codecs="avc1.64001f" width="1280" height="720" startWithSAP="1" bandwidth="1607692"/>
</AdaptationSet>
<AdaptationSet>
<ContentComponent id="2" contentType="audio" lang="und"/>
<SegmentTemplate initialization="/audio/HDWorld_audio_init.mp4"/>
<Representation id="6" mimeType="audio/mp4" codecs="mp4a.40.02" sampleRate="44100" numChannels="2" lang="und" startWithSAP="1" bandwidth="257141">
<SegmentTemplate timescale="1000" duration="9980" media="/audio/hdworld_seg_audio$Number$.m4s" startNumber="1"/>
</Representation> …Run Code Online (Sandbox Code Playgroud) 我正在创建TCP远程桌面广播应用程序.(服务器应用程序会像Team Viewer或VNC那样)
1. run on a PC listening for multiple clients on one Thread
2. and on another thread it will record the desktop every second
3. and it will broadcast the desktop for each connected client.
Run Code Online (Sandbox Code Playgroud)
我需要使这个应用程序可以在12KBps上传和50KBps下载DSL连接(客户端和服务器)的连接上运行.
所以..我必须减少每秒发送的数据/图像的大小.
我尝试通过以下方式减少.
I. first i send a Bitmap frame of the desktop and each other time i send only the difference of the previously sent frame.
II. the second way i tried was, each time i send a JPEG frame. …Run Code Online (Sandbox Code Playgroud) 我有一个来自Firewire天文相机的灰度视频流,我想使用FFmpeg来压缩视频流,但它不接受MPEG1VIDEO编解码器的单字节像素格式.如何使用FFmpeg API将灰度视频帧转换为FFmpeg接受的帧格式?
首先,对不起我的英语不好。我正在用C ++编写视频流服务器。我有多个mpeg2-ts文件(电影和广告),我需要通过HTTP将它们作为一个TS-FILE进行流式传输。问题在于每个mpeg-ts文件都有其自己的时间戳(PCR,PTS,DTS)。而且,据我所知,为了产生连续的流,每个新的PCR(PTS,DTS)值都应从上一个PCR(PTS,DTS)值开始继续。
这是一张图片,可以更好地理解我的意思:http : //i.stack.imgur.com/vL1m6.png(我不能直接在消息中包含我的图片。对不起)
我需要用新的替换pcr`1,pcr`2,pcr`3时间戳。例如,我发送了包含pcr3时间戳的ts-packet,然后再发送了几个ts数据包(不包含任何PCR值)之后,我想插入广告。我的问题是:如何计算pcr`1,pcr`2,pcr`3等的新值?
计算当前视频的比特率,然后将自上一个PCR时间戳(在本例中为pcr3)以来,程序已发送的位数除以该比特率是否正确?我的意思是:(新时间戳)=(上一个时间戳)+(位数)/(比特率)。还是有更有效的方法来做到这一点?
至于PTS和DTS时间戳,我在这里读到这些时间戳可以是非线性的。相对于我收到的最后一个原始PCR计算它是否正确?我的意思是:
pts_new = (original_pts - last_original_pcr) + pcr_new.
dts_new = (original_dts - last_original_pcr) + pcr_new.
(original_pts - last_original_pcr) is the difference between pts and pcr values
pcr_new is the last modified pcr value
Run Code Online (Sandbox Code Playgroud)
我的程序可以读取和编辑mpeg-ts流中的这些时间戳。幸运的是,关于如何执行此操作的文献很多。但是,如何计算这些时间戳的新值?
我刚刚开始学习mpeg2-ts的规范,如果我在某些方面有误,请更正我的错误。提前致谢。希望你理解我。
我正在尝试使用 FFmpeg 将视频从 mp4 格式转换为 mpeg,以便我可以合并多个视频。我有一个 FFmpeg 的自定义构建,我可以在其中控制配置选项:
ffmpeg -y -i VID_20150514_171122_12085.mp4 -an -f mpeg VID_20150514_184208.mp4.0.mpg
ffmpeg version git-2015-02-25-b0d3322 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.8 (GCC)
configuration: --arch=arm --cpu=cortex-a8 --target-os=linux --enable-runtime-cpudetect --enable-pic --disable-shared --enable-static --cross-prefix=/home/jon/Development/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --enable-cross-compile --sysroot=/home/jon/Development/android-ndk-r10d/platforms/android-9/arch-arm/ --extra-cflags='-I../x264 -mfloat-abi=softfp -mfpu=neon -fPIE -pie' --extra-ldflags='-L../x264 -fPIE -pie' --enable-version3 --enable-gpl --disable-doc --enable-yasm --disable-everything --enable-decoder=mpeg --enable-decoder=mpeg4 --enable-decoder=aac --enable-decoder=h264 --enable-decoder=libx264 --enable-encoder=libx264 --enable-decoder=mpegvideo --enable-decoder=mpeg1video --enable-decoder=mpeg2video --enable-encoder=mpeg --enable-encoder=mpeg4 --enable-encoder=aac --enable-encoder=h264 --enable-encoder=mpeg1video --enable-encoder=mpeg2video --enable-parser=aac --enable-parser=mpeg4video --enable-parser=ac3 --enable-parser=h261 --enable-parser=h264 --enable-parser=vc1 --enable-demuxer=mpegvideo --enable-demuxer=aac --enable-demuxer=m4v --enable-demuxer=mov --enable-demuxer=h264 …Run Code Online (Sandbox Code Playgroud) 我正在写一个MPEG-TS文件解析器,我一直在从PAT部分获取program_numbers和PID.我正在使用数据包分析器来比较我的结果.
例如,这是一个PAT数据包
47 40 00 16 00 00 B0 31 00 14 D7 00 00 00 00 E0
10 00 01 E0 24 00 02 E0 25 00 03 E0 30 00 04 E0
31 00 1A E0 67 00 1C E0 6F 43 9D E3 F1 43 A3 E3
F7 43 AC E4 00 C3 69 A6 D8 FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF …Run Code Online (Sandbox Code Playgroud)