有人可以解释我需要采取的步骤,以便为Android添加新的编解码器吗?
此外,我希望编解码器作为应用程序安装(或首次启动)的一部分安装,而不是作为完整Android操作系统构建的一部分.
我想这样做的原因是我有一个应用程序需要显示一个不受支持的编解码器(HLS或TS)的视频,但我不想构建一个完整的视频播放器 - 只需与现有的,内置播放器.
谢谢,Alik.
最近我有一个任务将文件格式转换为mp4并流式传输.我使用ffmpeg作为转码工具.MP4文件没有通过http协议流式传输[已使用php cgi包装],但随后输出格式更改为mpegts流式传输并正常工作.在网上快速搜索http://wiki.videolan.org/MPEG, 并建议使用mpegts进行流式传输mp4文件.我需要更深入地了解这两种格式,它们的优点和不同之处.
谢谢,彼得
我有一个文件,我需要转换为MPEG-TS,以便它符合以下规范:
基本流比特率[kbit/s]视频:2575音频:2 x 192字幕: - PAT/PMT: - 填充: -
分量TS比特率[kbit/s]视频:2652音频:395字幕:45 PAT/PMT:45填充:62总计:3200 CBR
其他必需组件:PAT PMT空包
可能弹出的组件:NIT,SDT,EIT等.
vcodec="h264"
acodec="mpga"
bitrate="2500"
arate="192"
samplerate=48000
ext="mpg"
mux="ts"
vlc="/usr/bin/vlc"
fmt="mpg"
dst="/home/adam/test/"
for a in *$fmt; do
$vlc -I dummy -vvv "/home/adam/test/" --sout "#transcode{vcodec=$vcodec,venc=x264{profile=main,level=3.0,hrd=cbr,bframes=2},vb=$bitrate,acodec=$acodec,ab=$arate,samplerate=$samplerate,channels=2}:standard{mux=$mux,dst=\"$dst$a.$ext\",ac$
done
Run Code Online (Sandbox Code Playgroud)
使用上面的脚本编码后,一切似乎都可以(视频和音频比特率编解码器都是常量)除了两件事:容器的比特率也应该保留CBR但事实并非如此.此外,填充组件(0x1 ffff) - 缺少空数据包.您是否可以更正脚本以使空数据包以及容器的比特率恒定(3,2 Mbps CBR)?
第二个选项是使用ffmpeg进行编码:
ffmpeg -i video_input.mpg -i audio_input.mp2 -acodec copy -tune zerolatency -x264opts bitrate=2600:vbv-maxrate=2600:vbv-bufsize=166:nal_hrd=cbr -vpre libx264-iptv -vcodec libx264 -f mpegts -muxrate 3200K -y output.ts
Run Code Online (Sandbox Code Playgroud)
但如何取消/禁用/删除SDT表?
我贴到另一社区的同样的问题,视频制作,我已经发现较晚,而这似乎是这个问题的一个更好的地方:
请参阅:https://video.stackexchange.com/questions/12156/how-can-i-convert-mts-file-avchd-to-mp4-by-ffmpeg-without-re-encoding-h264-v/
我有一些用我的AVCHD相机记录的.MTS(AVCHD格式)文件.其规格如下图所示:
$ ffprobe 140612_Canon-00000.MTS
ffprobe version 2.2.1 Copyright (c) 2007-2014 the FFmpeg developers
(snip)
Input #0, mpegts, from '140612_Canon-00000.MTS':
Duration: 00:48:58.40, start: 0.800300, bitrate: 5563 kb/s
Program 1
Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448),
yuv420p, 1440x1080 [SAR 4:3 DAR 16:9],
29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz,
stereo, fltp, 256 kb/s
Run Code Online (Sandbox Code Playgroud)
注意帧速率/时基的部分:29.97 fps,29.97 tbr,90k tbn,59.94 tbc
现在,我想 …
我正在向高比特率的HLS流录制连续的实时流.然后我想异步地将其转码为不同的格式/比特率.除了音频人工制品出现在每个片段(间隙和弹出片段)之外,我主要使用它.
这是一个示例ffmpeg命令行:
ffmpeg -threads 1 -nostdin -loglevel verbose \
-nostdin -y -i input.ts -c:a libfdk_aac \
-ac 2 -b:a 64k -y -metadata -vn output.ts
Run Code Online (Sandbox Code Playgroud)
检查示例声音文件显示音频末尾有间隙:
并且文件的开头看起来可疑地减弱了(尽管这可能不是问题):
我怀疑这些人工制品正在发生,因为转码是在没有整个流的背景下发生的.
关于如何说服FFMPEG产生适合HLS流的音频的任何想法?
**更新1**
以下是原始细分的开始/结束.正如你所看到的,开始时看起来仍然相同,但最终在30s结束时干净利落.我期望有一定程度的填充与有损编码,但我有一些方法,HLS设法做无间隙播放(这与iTunes方法与自定义元数据有关吗?)
**更新2**
因此,我将原始(128k aac in MPEG2 TS)和转码(64k aac in aac/adts容器)转换为WAV并将两者并排放置.这是结果:
我不确定这是否代表了客户端如何播放它,但解码转码后的解码器在开始时引入了一个间隙并使段更长时间似乎有点奇怪.鉴于它们都是有损编码,我希望填充在两者中同样存在(如果有的话).
**更新3**
根据http://en.wikipedia.org/wiki/Gapless_playback-只有少数编码器支持无间隙 - 对于MP3,我在ffmpeg中已经变得蹩脚,到目前为止,这个问题似乎已经消失了.
对于AAC(请参阅http://en.wikipedia.org/wiki/FAAC),我尝试了libfaac(而不是libfdk_aac),它似乎也产生了无间隙音频.然而,后者的质量并不是那么好,我宁愿使用libfdk_aac也是可能的.
我试图从PTS创建PCR如下.
S64 nPcr = nPts * 9 / 100;
pTsBuf[4] = 7 + nStuffyingBytes;
pTsBuf[5] = 0x10; /* flags */
pTsBuf[6] = ( nPcr >> 25 )&0xff;
pTsBuf[7] = ( nPcr >> 17 )&0xff;
pTsBuf[8] = ( nPcr >> 9 )&0xff;
pTsBuf[9] = ( nPcr >> 1 )&0xff;
pTsBuf[10]= ( nPcr << 7 )&0x80;
pTsBuf[11]= 0;
Run Code Online (Sandbox Code Playgroud)
但问题是VLC只播放第一帧而不播放任何其他帧.我收到警告"早期图片被跳过".
任何人都可以帮助我从PTS转换为PCR ..
我有几个嵌入了KLV元数据的MPEG2传输流视频.我想在网络浏览器中显示视频.是否可以使用HTML5 <video>
标记在Web浏览器中播放此类视频?
如果我使用转换器将视频从MPEG-TS容器中拉出并创建一个用H.264编码的MPEG4文件,那么我可以将视频显示在浏览器中.但有没有可能的方式我可以显示这些视频而无需将它们转换为不同的格式?我需要保留KLV数据,以便我可以用它来做其他事情.
我有一个MPEG2 TS文件,现在我有兴趣从每个相框中提取PTS信息.我知道PTS用33位描述,包括3个标记位.但我不知道如何将这个位域转换为更易理解的形式(秒,毫秒).请有人帮帮我
您好我正在尝试使用mediarecorder api并生成包含h264视频和aac音频的mpeg2ts输出.
1)当我单独录制视频时,生成的输出.ts文件工作正常,没有任何延迟.2)当我录制音频和视频时,应用程序崩溃.所以我在网上进行了一些搜索,发现它是AOSP框架中的MPEG2TS writer.cpp中的一个错误,基于这个链接,<< code.google.com/p/android/issues/detail?id=37714> >我应用了建议的补丁并尝试了同样的方法.我能够对音频和视频进行编码,但生成的输出文件存在问题.
3)作者没有正确的工作.有滞后.首先播放视频帧,然后在视频冻结时播放音频,然后播放.
4)编写器代码可以在这里找到 - > << androidxref.com/4.2.2_r1/xref/frameworks/av/media/libstagefright/MPEG2TSWriter.cpp >>
我添加的补丁可以在这里找到 - > << code.google.com/p/android/issues/attachmentText?id=37714&aid=377140007000&name=patch&token=E7rjXqE55TIp50S7sI04mxbsRCA%3A1384836153502 >>
5)有人请告诉我作者的问题是什么,如何在代码中修复它,请提供一些固定的代码片段.
我的android源代码是:
myCamera = getCameraInstance();
mediaRecorder = new MediaRecorder();
myCamera.unlock();
mediaRecorder.setCamera(myCamera);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setOutputFormat(8);
mediaRecorder.setOutputFile("/sdcard/myvideo.ts");
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setVideoSize(320, 240);
mediaRecorder.setVideoFrameRate(15);
mediaRecorder.setMaxDuration(20);
mediaRecorder.setMaxFileSize(10000);
mediaRecorder.setPreviewDisplay(myCameraSurfaceView.getHolder()
.getSurface());
Run Code Online (Sandbox Code Playgroud)
6)一旦我让ts编写器工作,我需要通过RTP发送ts数据包进行直播,所以请帮助修复ts writer问题.
我正在编写一个在HTTP上直播mpeg2-ts的服务器,我想知道分割mpeg传输流的最佳位置是什么.该流将由iptv机顶盒播放,我不知道这些设备的行为方式.
我认为启动流的最佳位置是在I帧之前,但设备在开始解码视频流数据之前可能需要PAT和PMT数据包...