- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Khi tôi giải mã các khung hình từ tệp avi, sau đó giải mã chúng ở x264 và lưu vào tệp mp4, khung hình/giây của tệp đầu ra luôn là 12.800. Vì vậy file phát rất nhanh. Tuy nhiên, khi tôi lưu các khung hình h264 được mã hóa dưới dạng avi thay vì mp4, khung hình/giây là thứ tôi muốn - 25.
可能是什么问题?
Đây là mã tôi đã viết trong VS2010:
#include "stdafx.h"
#include "inttypes.h"
bên ngoài "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavutil/avutil.h"
#include
#include
#include
#include
}
#include
using namespace std;
int main(int argc, char* argv[])
{
const char* inFileName = "C:\\000227_C1_GAME.avi";
const char* outFileName = "c:\\test.avi";
const char* outFileType = "avi";
av_register_all();
AVFormatContext* inContainer = NULL;
if(avformat_open_input(&inContainer, inFileName, NULL, NULL) < 0)
exit(1);
if(avformat_find_stream_info(inContainer, NULL) < 0)
exit(1);
// Tìm luồng video
int videoStreamIndex = -1;
for (unsigned int i = 0; i < inContainer->nb_streams; ++i)
{
if (inContainer->streams[i] && inContainer->streams[i]->codec &&
inContainer->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
{
videoStreamIndex = i;
phá vỡ;
}
}
if (videoStreamIndex == -1) exit(1);
AVFormatContext* outContainer = NULL;
if(avformat_alloc_output_context2(&outContainer, NULL, outFileType, outFileName) < 0)
exit(1);
//-----------------------------
// Bộ giải mã
//-----------------------------
AVStream const *const inStream = inContainer->streams[videoStreamIndex];
AVCodec *bộ giải mã const = avcodec_find_decoding(inStream->codec->codec_id);
nếu(! Bộ giải mã)
exit(1);
if(avcodec_open2(inStream->codec, bộ giải mã, NULL) < 0)
exit(1);
//-----------------------------
// Bộ mã hóa
//-----------------------------
AVCodec *bộ mã hóa = avcodec_find_encoding(AV_CODEC_ID_H264);
nếu (! Bộ mã hóa)
exit(1);
AVStream *outStream = avformat_new_stream(outContainer, bộ mã hóa);
if(!outStream)
exit(1);
avcodec_get_context_defaults3(outStream->codec, bộ mã hóa);
//Xây dựng bộ mã hóa
if(outContainer->oformat->flags & AVFMT_GLOBALHEADER)
outStream->codec->cờ |= CODEC_FLAG_GLOBAL_HEADER;
outStream->codec->code_type = AVMEDIA_TYPE_VIDEO;
outStream->codec->pix_fmt = AV_PIX_FMT_YUV420P;
outStream->codec->width = inStream->codec->width;
outStream->codec->height = inStream->codec->height;
outStream->codec->codec_id = bộ mã hóa->id;
outStream->codec->bit_rate = 500000;
//outStream->codec->rc_min_rate = 600000;
//outStream->codec->rc_max_rate = 800000;
outStream->codec->time_base.den = 25;
outStream->codec->time_base.num = 1;
outStream->codec->gop_size = 250; // Khoảng thời gian khung hình chính(=độ dài GOP) Xác định khoảng cách tối đa giữa các khung hình I.
outStream->codec->keyint_min = 25; // kích thước GOP tối thiểu
outStream->codec->max_b_frames = 3;//16; // số lượng khung hình B tối đa giữa các khung hình không phải B
outStream->codec->b_frame_strategy = 1; // quyết định số lượng khung B tốt nhất để sử dụng.
outStream->codec->scenechange_threshold = 40;
outStream->codec->refs = 6; // khả năng tham chiếu các khung khác với khung ngay trước khung hiện tại chỉ định số lượng tham chiếu có thể được sử dụng.
outStream->codec->qmin = 0;//10;
outStream->codec->qmax = 69;//51;
outStream->codec->qcompress = 0,6;
outStream->codec->max_qdiff = 4;
outStream->codec->i_quant_factor = 1,4;//0,71;
outStream->codec->refs=1;//3;
outStream->codec->chromaoffset = -2;
outStream->codec->thread_count = 1;
outStream->codec->trellis = 1;
outStream->codec->me_range = 16;
outStream->codec->me_method = ME_HEX; //hex
outStream->codec->flags2 |= CODEC_FLAG2_FAST;
outStream->codec->codec->code_type = 1;
if(outStream->codec->codec_id == AV_CODEC_ID_H264)
{
av_opt_set(outStream->codec->priv_data, "đặt trước", "chậm", 0);
}
// Mở bộ mã hóa
if(avcodec_open2(outStream->codec, bộ mã hóa, NULL) < 0)
exit(1);
// Mở vùng chứa đầu ra
if(avio_open(&outContainer->pb, outFileName, AVIO_FLAG_WRITE) < 0)
exit(1);
//đóng_o
AVFrame *decodedFrame = avcodec_alloc_frame();
if(!decodedFrame)
exit(1);
AVFrame *encodeFrame = avcodec_alloc_frame();
if(!encodeFrame)
exit(1);
EncodeFrame->format = outStream->codec->pix_fmt;
EncodeFrame->width = outStream->codec->width;
EncodeFrame->height = outStream->codec->height;
if(av_image_alloc(encodeFrame->data, EncodeFrame->linesize,
outStream->codec->chiều rộng, outStream->codec->chiều cao,
outStream->codec->pix_fmt, 1) < 0)
exit(1);
av_dump_format(inContainer, 0, inFileName,0);
// Ghi tiêu đề vào vùng chứa đầu ra
avformat_write_header(outContainer, NULL);
AVPacket giải mãPacket, EncodedPacket;
int got_frame, len;
while(av_read_frame(inContainer, &decodePacket)>=0)
{
nếu (decodePacket.stream_index == videoStreamIndex)
{
len = avcodec_decode_video2(inStream->codec, decodedFrame, &got_frame, &decodePacket);
nếu(len < 0)
exit(1);
nếu(got_frame)
{
av_init_packet(&encodedPacket);
mã hóaPacket.data = NULL;
mã hóaPacket.size = 0;
if(avcodec_encode_video2(outStream->codec, &encodedPacket, decodedFrame, &got_frame) < 0)
exit(1);
nếu(got_frame)
{
if (outStream->codec->coded_frame->key_frame)
được mã hóaPacket.flags |= AV_PKT_FLAG_KEY;
mã hóaPacket.stream_index = outStream->index;
if(av_interleaved_write_frame(outContainer, &encodedPacket) < 0)
exit(1);
av_free_packet(&encodedPacket);
}
}
}
av_free_packet(&decodePacket);
}
av_write_trailer(outContainer);
avio_close(outContainer->pb);
avcodec_free_frame(&encodeFrame);
avcodec_free_frame(&decodedFrame);
avformat_free_context(outContainer);
av_close_input_file(inContainer);
return 0;
}
câu trả lời hay nhất
Vấn đề nằm ở PTS và DTS của gói. Trước khi ghi gói tin vào đầu ra (trong av_interleaved_write_frame
trước lệnh) đặt PTS và DTS như thế này
nếu (encodedPacket.pts != AV_NOPTS_VALUE)
được mã hóaPacket.pts = av_rescale_q(encodedPacket.pts, outStream->codec->time_base, outStream->time_base);
nếu (encodedPacket.dts != AV_NOPTS_VALUE)
được mã hóaPacket.dts = av_rescale_q(encodedPacket.dts, outStream->codec->time_base, outStream->time_base);
Về c++ - FPS quá cao khi lưu video vào vùng chứa mp4, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/13565062/
Tôi đang sử dụng đoạn mã sau để phát âm thanh, sau một thời gian nó sẽ ngừng phát âm thanh, điều này là do tôi tin rằng có quá nhiều phiên bản Mediaplayer đang mở, vì vậy tôi đã thêm một mp.release(); chương trình ứng dụng của tôi gặp sự cố (hiện đã được nhận xét)
Tôi đang xem mã XV-6, mã này nhận dạng cấu trúc MP. Đầu tiên nó tìm kiếm trong kb đầu tiên của EBDA. Mã này giống như thế này struct mp* mpsearch(void) { uchar *
Tôi đang sử dụng biểu đồ hình tròn MP trong ứng dụng của mình. Nó đang hiển thị kích thước rất nhỏ và tôi đã cố gắng tăng kích thước của nó nhưng nó không tăng kích thước. Tôi không thể hiểu được vấn đề là gì. Xin vui lòng cho chúng tôi biết làm thế nào để tăng kích thước. Đây là mã của tôi: lớp công khai MPpiecha
Làm cách nào tôi có thể đạt được điều này bằng MPAndroidChart? Phiên bản được sử dụng: com.github.PhilJay:MPAndroidChart:v3.1.0-alpha Mã để thêm chú giải và lề biểu đồ hình tròn: riêng tư
Kính gửi cộng đồng, tôi đang gặp phải vấn đề sau, tôi đang tạo biểu đồ thanh bằng thư viện biểu đồ MP android có sẵn tại đây: https://github.com/PhilJay/MPAndroidChart. Tôi muốn đặt lại độ dốc cho các thanh của mình.
Tôi đang phát triển đoạn mã đầu tiên của mình bằng cách sử dụng SAS MP Connect để chạy các luồng song song của cùng một công việc. Tôi biết MP CONNECT chỉ bị giới hạn về mặt vật lý bởi số lượng CPU có sẵn, nhưng lý tưởng nhất là tôi không muốn sử dụng nó trong công việc của mình
Gần đây tôi đã mua giấy phép cho Stata MP12 (8 lõi) chạy trên máy chủ Linux. Có ai đã viết chương trình Stata, chẳng hạn như nghiên cứu mô phỏng, để kiểm tra hiệu suất của Stata MP chưa? Tôi muốn theo dõi nội dung thực sự được sử dụng trong quá trình xử lý công việc
Tôi sẽ biết ơn bất kỳ hướng dẫn "từng bước" nào về cách thay đổi mã trên chuỗi kết nối/kết nối cơ sở dữ liệu động/v.v. trên trang PHP/HTML để làm cho nó hoạt động "cắm và chạy" bằng cách lưu trữ trang và cơ sở dữ liệu MySQL qua ftp Trong "Trang web Azure
Đang cố gắng đặt nút "tạm dừng" trong ứng dụng của tôi để phát một số clip âm thanh theo vòng lặp. Khi tôi gọi mp.pause(); mọi thứ đều hỏng và tôi hoàn toàn mất phương pháp! người đàn ông trống rỗng được bảo vệ
Tôi muốn tạo biểu đồ dạng đường bằng Mp Chart Điều tôi muốn đạt được là bức ảnh này nhưng cho đến nay tôi đã có được cái này. Mã tôi sử dụng là niềm vui riêng tư setData() { valentry
Thông thường, tôi có thể viết một vòng lặp giống như simd: float * x = (float *) malloc(10 * sizeof(float));
Có rất nhiều câu trả lời trên các bài đăng khác liên quan đến không gian ngăn xếp, OpenMP và cách giải quyết những vấn đề này. Tuy nhiên, tôi không thể tìm thấy thông tin để thực sự hiểu tại sao OpenMP điều chỉnh các tùy chọn trình biên dịch: Lý do là gì - fopenmp ngụ ý trong gfortran
Tôi có một đoạn mã tính giá cổ phiếu vào bất kỳ ngày nhất định nào dựa trên độ lệch, biến động và số ngẫu nhiên. Nhưng khi tôi kiểm tra danh sách đầu ra - chúng là chuỗi số học, không phải chuỗi hình học (hàm lũy thừa). Có điều gì sai với các biến được chia sẻ của tôi không? Mã như sau: #include #i
Tôi đang cố gắng song song hóa thuật toán lập trình động trong C++ 11 bằng cách sử dụng phương pháp này: void buildBaseCases() { cout << "Building base case" << endl
Tôi đang triển khai sản phẩm dấu chấm song song trong MP mở. Tôi có mã này: #include #include #include #include #include #include #define SIZE
Tôi đã có một máy chủ được gần 4 năm và cho đến nay tôi chưa gặp bất kỳ sự cố nào (phía máy chủ). Tôi đã chuyển đổi máy chủ vì nội dung ddos đang cố gắng tìm ra thứ phù hợp nhất với mình. Bây giờ tôi đã mua một VPS (không phải cái đầu tiên của tôi) và thử chạy máy chủ của mình
Vậy tôi có hai diện tích song song bên trong và một diện tích song song bên ngoài. Có thể đặt 2 sợi vào các đường song song bên ngoài và 4 sợi vào mỗi đường song song bên trong không? Tôi đã làm một cái gì đó như thế này nhưng nó dường như không hoạt động theo cách tôi muốn. Có gợi ý gì không? bắt đầu_r =
Tôi hy vọng ai đó có thể chỉ ra vấn đề chúng tôi đang gặp phải hoặc giải pháp. Khi biên dịch một dự án bằng /MP, có vẻ như chỉ các tệp trong cùng một thư mục mới được biên dịch cùng lúc. Tôi đã sử dụng Process Explorer để vuốt qua dòng lệnh và xác nhận hành vi. Bộ lọc dự án dường như hoạt động trên nội dung được biên dịch đồng thời
Bài viết này tổng hợp một số ví dụ mã của lớp me.chanjar.weixin.mp.api.WxMpMessageRouter trong Java và hiển thị cách sử dụng cụ thể của lớp WxMpMessageRouter. Các ví dụ mã này chủ yếu có nguồn gốc từ G
Tôi đang theo dõi việc sử dụng CPU và bộ nhớ của Stata/MP (phiên bản đa lõi của Stata/SE), nhưng tôi không phải là lập trình viên Stata (giống một người Perl hơn). Bất cứ ai cũng có thể đăng một số mã tận dụng các tập dữ liệu công khai
Tôi là một lập trình viên xuất sắc, rất giỏi!