标签: transport-stream

如何在没有MediaExtractor的情况下为H264使用MediaCodec

我需要在没有MediaExtractor的情况下使用MediaCodec,我正在使用FileInputStream读取文件.目前它不工作,它在屏幕上显示绿色的乱码图像.

这是完整的源代码:

FileInputStream in = new FileInputStream("/sdcard/sample.ts");

String mimeType = "video/avc";
MediaCodec decoder = MediaCodec.createDecoderByType(mimeType);
MediaFormat format = MediaFormat.createVideoFormat(mimeType, 1920, 1080);

byte[] header_sps = { 0, 0, 0, 1, 103, 100, 0, 40, -84, 52, -59, 1, -32, 17, 31, 120, 11, 80, 16, 16, 31, 0, 0, 3, 3, -23, 0, 0, -22, 96, -108 };
byte[] header_pps = { 0, 0, 0, 1, 104, -18, 60, -128 };
format.setByteBuffer("csd-0", ByteBuffer.wrap(header_sps));
format.setByteBuffer("csd-1", ByteBuffer.wrap(header_pps));
format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 1920 * 1080);
format.setInteger("durationUs", 63446722); …
Run Code Online (Sandbox Code Playgroud)

android transport-stream h.264 stagefright mediacodec

24
推荐指数
2
解决办法
2万
查看次数

如何更改我的FFMPEG命令以使我的HTTP Live Streams更高效?

我想在使用FFMPEG创建.ts文件时减少多路复用开销.

我使用FFMPEG创建一系列用于HTTP直播传输流文件.

./ffmpeg -i myInputFile.ismv \
         -vcodec copy \
         -acodec copy \
         -bsf h264_mp4toannexb \
         -map 0 \
         -f segment \
         -segment_time 10\
         -segment_list_size 999999 \
         -segment_list output/myVarientPlaylist.m3u8 \
         -segment_format mpegts \
         output/myAudioVideoFile-%04d.ts
Run Code Online (Sandbox Code Playgroud)

我的输入是ismv格式,包含视频和音频流:

Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 320x240, 348 kb/s, 29.97 tbr, 10000k tbn, 59.94 tbc
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 63 kb/s
Run Code Online (Sandbox Code Playgroud)

存在与多路复用相关的问题,这导致将大量开销添加到流中.这是我为音频描述的问题:

在此输入图像描述

因此对于给定的aac流,开销将是88%(因为200字节将映射到2 x 188字节数据包).

对于视频,iframe数据包非常大,因此它们可以很好地转换为.ts数据包,但是,差异可以与音频数据包一样小,因此它们会遇到同样的问题.

解决方案是将几个aac数据包组合成一个更大的流,然后再将它们打包成.ts.这是否可以开箱即用FFMPEG?

audio video ffmpeg transport-stream http-live-streaming

19
推荐指数
1
解决办法
2552
查看次数

FFmpeg - 从传输流文件中提取视频和音频(.ts)

我希望通过在不丢失质量的情况下指定其PID并在结果文件中使用相同的编解码器(输出文件是MPEG)来提取传输流文件(.ts)中某个程序的音频和视频.

这对FFmpeg 来说甚至可能吗?如果是这样,我该怎么办?

到目前为止,我已经来到这个命令:

 ffmpeg -i tsfile.ts -vcodec copy -acodec copy -q:v 1 output.mpg
Run Code Online (Sandbox Code Playgroud)

编辑:请注意,文件output.mpg已创建.该文件包含视频,但未附加音频(没有声音).此外,我无法指定要提取的程序PID.

编辑2:这是ffmpeg -i tsfile.ts的输出

ffmpeg version N-47062-g26c531c Copyright (c) 2000-2012 the FFmpeg developers
built on Nov 25 2012 12:21:26 with gcc 4.7.2 (GCC)
    libavutil      52.  9.100 / 52.  9.100
    libavcodec     54. 77.100 / 54. 77.100
    libavformat    54. 37.100 / 54. 37.100
    libavdevice    54.  3.100 / 54.  3.100
    libavfilter     3. 23.102 /  3. 23.102
    libswscale      2.  1.102 …
Run Code Online (Sandbox Code Playgroud)

audio video ffmpeg transport-stream

14
推荐指数
2
解决办法
5万
查看次数

无法写入时间戳未知的数据包 av_interleaved_write_frame():参数无效

我正在尝试将具有此输出的 .ts 文件转换为 mkv:

ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
  built with Apple clang version 12.0.0 (clang-1200.0.32.27)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.3.1_4 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 …
Run Code Online (Sandbox Code Playgroud)

ffmpeg transport-stream matroska

12
推荐指数
2
解决办法
1万
查看次数

AVPlayer/MPMoviePlayerController的字幕

我正在使用m3u8视频格式来播放视频,现在我需要显示相同的字幕.

我在Apple文档中搜索,发现我可以通过使用closedCaptionDisplayEnabled属性来实现这一点AVPlayer.

我很想知道字幕的格式应该是什么?.srt格式会这样吗?

我也可以实现同样的使用MPMoviePlayerController吗?

任何帮助表示赞赏.

transport-stream mpmovieplayercontroller avfoundation subtitle avplayer

10
推荐指数
3
解决办法
1万
查看次数

FFMPEG - 转换视频而不会丢失分辨率

我正在使用ffmpeg从youtube转换mp4视频.该视频是HD 1080.当我将其转换为mpeg2video时,无论-s 1920x1080参数如何,视频都会失去清晰度.如何在不丢失图像清晰度的情况下转换视频?我使用的命令是:

ffmpeg -i BBB.mp4 -vcodec mpeg2video -s1920x1080 -acodec copy -f mpegts BBB.ts

video ffmpeg transport-stream

6
推荐指数
2
解决办法
2万
查看次数

使用 OpenSSL 解密 .ts 文件

一切都在同一个目录中。

M3u8 文件

#EXTM3U
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI=MyKeyFile.key
#EXTINF:10,
aes_ts_files/filesequence0000000.ts
#EXTINF:10,
aes_ts_files/filesequence0000001.ts
#EXTINF:10,
aes_ts_files/filesequence0000002.ts
#EXTINF:10,
aes_ts_files/filesequence0000003.ts
#EXTINF:10,
aes_ts_files/filesequence0000004.ts
#EXTINF:10,
aes_ts_files/filesequence0000005.ts
#EXTINF:10,
aes_ts_files/filesequence0000006.ts
#EXTINF:10,
aes_ts_files/filesequence0000007.ts
#EXTINF:10,
aes_ts_files/filesequence0000008.ts
#EXTINF:10,
aes_ts_files/filesequence0000009.ts
#EXTINF:10,
aes_ts_files/filesequence0000010.ts
#EXTINF:10,
aes_ts_files/filesequence0000011.ts
#EXTINF:10,
aes_ts_files/filesequence0000012.ts
#EXTINF:10,
aes_ts_files/filesequence0000013.ts
#EXTINF:10,
aes_ts_files/filesequence0000014.ts
#EXTINF:10,
aes_ts_files/filesequence0000015.ts
#EXTINF:10,
aes_ts_files/filesequence0000016.ts
#EXTINF:10,
aes_ts_files/filesequence0000017.ts
#EXTINF:10,
aes_ts_files/filesequence0000018.ts
#EXTINF:10,
aes_ts_files/filesequence0000019.ts
#EXTINF:10,
aes_ts_files/filesequence0000020.ts
#EXTINF:10,
aes_ts_files/filesequence0000021.ts
#EXTINF:10,
aes_ts_files/filesequence0000022.ts
#EXTINF:3,
aes_ts_files/filesequence0000023.ts
#EXT-X-ENDLIST
Run Code Online (Sandbox Code Playgroud)

MyKeyFile.Key

tßâ0Äb‘˜p.ô[{m‚
Run Code Online (Sandbox Code Playgroud)

我知道内容是合法的,因为如果我右键单击 .m3u8 并选择“使用 VLC 媒体播放器播放”它可以工作。我需要解密 ts 文件,以便我可以使用 ffprobe 并检查内容。

这是我尝试过的 OpenSSL 命令

openssl aes-128-cbc -d -kfile MyKeyFile.key -iv 0 …
Run Code Online (Sandbox Code Playgroud)

openssl transport-stream http-live-streaming ffprobe

6
推荐指数
1
解决办法
8367
查看次数

使用FFMPEG的HLS MPEG-TS元数据流

我想为HLS流创建mpeg ts段.ts应包含元数据作为单独的流,如下所示 -

**Stream #0:0**[0x102]: Data: timed_id3 (ID3  / 0x20334449) 
**Stream #0:1**[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 426x240, 25 fps, 25 tbr, 90k tbn, 6k tbc
**Stream #0:2**[0x101]: Audio: aac ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 98 kb/s
Run Code Online (Sandbox Code Playgroud)

我正在使用ffmpeg并尝试了各种选项.我得到以下ts结构 -

**service_name**    : Service01
**service_provider**: FFmpeg
**Stream #0:0[0x100]**: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv), 720x576 [SAR 1:1 DAR 5:4], max. 104857 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
**Stream #0:1[0x101]**: Audio: mp2 ([3][0][0][0] / 0x0003), …
Run Code Online (Sandbox Code Playgroud)

mpeg ffmpeg transport-stream http-live-streaming

5
推荐指数
1
解决办法
1942
查看次数

解复用器如何区分作为同步字节的0x47和作为数据的0x47?

对于解复用器,输入是字节流.一切都只是零和一个.现在,解析器如何区分数据中的0x47和传输流头的同步字节0x47?

例如,如果demux接收的数据是0x47 0x56 0xef 0x47 ...它将如何知道哪个0x47是同步字节?

它是否在同步字节后寻找任何附加位以确保它读取的0x47确实是标头的开头?机制是什么?

对于任何解析器来说都是如此.H.264解析器检查NAL起始码.它如何区分数据中的实际起始代码和起始代码.因为对于解析器,一切都只是字节.

谢谢.

video parsing mpeg transport-stream h.264

5
推荐指数
1
解决办法
909
查看次数

检测MPEG-4传输流中的I帧数据

我正在测试一个项目.我需要将来自用户的百分比的MPEG-4 ts数据包的有效载荷数据(零个字节)分开.我是通过按包读取".ts"文件(188字节)来完成的.但视频正在变得非常泥泞.(顺便说一下,我用C编写程序)

所以我决定找到属于I帧的数据/数据包,然后不接触它们,而是按百分比加扰其他数据.我可以在下面找到

(十六进制)00 00 00 01 E0视频开始PES包.. 00 00 01 B8开始图像组头... .. 00 00 01 00图像开始代码.这是32位.紧随其后的10位称为时间参考.因此,时间参考将包括图像起始码之后的字节和图像起始码之后的第二字节的前两位,即一个字节(8位)+2位.这些我们需要跳过.现在存在的三个位(来自图像起始码的第二个字节的3,4和5位)将指示帧类型,即I,B或P.因此,为了得到这个简单的逻辑AND和来自图像起始码的第二个字节用0x38和右移>>用3.

例如,数据就是这样;

00 00 01 00 00 0F FF F8 00 00 01 B5 ...........依此类推.

这里前四个字节0​​0 00 01 00是图像起始码.第六字节的第五字节和前两位是时间参考.所以我们关注的是第六个字节 - > 0F

((0F & 38)>>3)
Run Code Online (Sandbox Code Playgroud)

帧类型= 1 ==> I帧

框架类型000禁止

帧类型001帧内编码(I) - iframe

帧类型010预测编码(P)-p帧

帧类型011双向预测编码(B)-b帧

但这是针对MPEG-2的.是否有一些这样的模式,所以我认识并获得MPEG-4传输流的按位操作的帧类型(扩展名为".ts")?

我需要得到多少字节或数据包属于该帧?

非常感谢你的帮助

c transport-stream mpeg-4 mpeg2-ts

4
推荐指数
1
解决办法
8062
查看次数

使用 ffmpeg 将多个单个视频 MPEG-TS 复用为 MPTS

我试图找到一种解决方案,将不同的输入 (ts) 复用到一个 MPTS 中,以便可以用作 DVB-T 调制器的输入。基本上,我想要的是选择卫星接收器提供的某些 TS,将它们重新打包成一个 MPTS 并发送到调制器。目前,我已成功使用以下命令通过一个流来完成此操作:

  ~/DATVRelease/ffmpeg \
 -re -i URL_SINGLE_INPUT_TS_STREAM  -vcodec copy -acodec copy \
 -f mpegts -mpegts_original_network_id 1 -mpegts_transport_stream_id 1 \
 -mpegts_service_id 1 -mpegts_pmt_start_pid 1000 -mpegts_start_pid 1001 \
 -metadata service_provider="YOUR CALL" \
 -metadata service_name="N1 (ALEKSANDAR)" \
 ~/dvb/videots
Run Code Online (Sandbox Code Playgroud)

其中 videots 是由 mkfifo 命令生成的 fifo 管道。以下代码在接收方产生结果:

https://i.stack.imgur.com/BZugM.jpg

ffmpeg 中有一个 -map 函数,我可以在其中添加多个音频通道/或视频通道,但它们不会在接收器端被检测为不同的服务电视频道,因为根据我的理解,必须创建足够的 PMT 表(iso13818)

我能找到的唯一开源是这个http://www.scara.com/~schirmer/o/mplex13818/,但我仍然想知道 ffmpeg 是否可以为我完成这项工作?

video ffmpeg transport-stream multiplexing

3
推荐指数
1
解决办法
1万
查看次数

ATSC数字广播

我不知道我需要问哪个标签这个问题.我目前正在研究数字电视广播的ATSC标准.在浏览内容时我有疑虑.在数字电视广播中,单个带宽将包含多个频道(服务).

由广播公司编码和多路复用的数据称为传输流.

传输流由标头和有效负载组成.标题包括音频基本流或视频基本流或数据基本流的PID.该传输流由包含中间件的机顶盒接收,该中间件解析传输流并将数据放入PAT,PMT,EIT,ETT,SDT,NIT,CAT表中.

是否可以使用PSI表而不是ATSC表?

mpeg mpeg-2 transport-stream mpeg2-ts dvb

2
推荐指数
1
解决办法
1711
查看次数

我可以在 MPEG TS 容器中拥有原始视频流吗

我通过网络 (UDP) 收到 MPEG TS 容器。它包含两个流:一个具有 yuv420p 像素格式的 mpeg2video 视频流和一个使用适当的 KLV 格式编码的数据流。

我的接收器程序必须是Python 的。所以,我不能直接使用 FFMPEG 库(如AVFormatAVCodec)。

现在我的问题如下:

我需要接收视频帧并将它们保存为 RGB 图像作为原始numpy数组。我还需要为每一帧解析相应的KLV数据。视频帧和KLV数据单元之间存在一对一的关系。

我想我用来ffprobe输出数据包,包括来自传入容器的有效负载数据,然后解析输出ffprobe以获取图像和元数据:

$ ffprobe -show_packets -show_data -print_format json udp://127.0.0.1:12345 > test_video.packets.data.json 
Run Code Online (Sandbox Code Playgroud)

这给了我一个输出(在test_video.packets.data.json文件中),例如:

{
    "codec_type": "video",
    "stream_index": 0,
    "pts": 140400,
    "pts_time": "1.560000",
    "dts": 136800,
    "dts_time": "1.520000",
    "duration": 3600,
    "duration_time": "0.040000",
    "size": "21301",
    "pos": "3788012",
    "flags": "K_",
    "side_data_list": [
        {
            "side_data_type": "MPEGTS Stream ID"
        }
    ],
    "data": "... "
},
{ …
Run Code Online (Sandbox Code Playgroud)

ffmpeg transport-stream mpeg2-ts

2
推荐指数
1
解决办法
2745
查看次数